웹의 동작방식

 

IP 주소란?

  • 거대한 네트워크망에서 컴퓨터를 식별하기 위한 위치 주소 
  • 네트워크상에서의 데이터 송/수신은 이 주소를 기준으로 이루어지고 있다.

 

브라우저란?

  • 크롬, 사파리, 엣지와 같이 웹페이지, 이미지, 비디오등의 컨텐츠를 송/수신하고 표현해주는 소프트웨어
  • 브라우저의 역할 : 컨텐츠를 송/수신, 컨텐츠를 표현
  • 브라우저는 메세지가 OSI 7 계층을 거쳐 랜선을 통해 0과 1로 변경되어 흘러갈 수 있도록 도와주는 응용프로그램이자, 클라이언트와 상호작용해서 요청을 보내는 응용프로그래밍 계층의 첫 출발점

 

DNS(Domain Name Server)란?

  • IP주소 대신 abcdefg.com과 같은 도메인 이름 을 입력해서 원하는 웹 사이트로 이동하게 해주는 역할
  • 요청을 받아줄 서버의 IP주소(192.168.0.123)와 도메인 이름을 사이를 중개해주는 중개 서버

 

HTTP란 ??

  • 멀리 떨어져서 서로에 대한 정보가 없는 메세지의 송/수신자가 서로 필요한 요청과 응답을 할 수 있도록 미리 규약을 정해놓은 것을 프로토콜이라고 하고, 웹 상에서는 HTTP 라는 프로토콜을 통해서 데이터를 송/수신 하고 있다.

 

API(application programming interface)

  • 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙
  • 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다.
  • 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각할 수 있다.

 

인터페이스(interface)

  • 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다.
  • 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.
  • 컴퓨팅에서 컴퓨팅 시스템끼리 정보를 교환하는 공유 경계이다. 이러한 교환은 소프트웨어, 컴퓨터 하드웨어, 주변기기, 사람간에 이루어질 수 있으며, 서로 복합적으로 이루어질 수도 있다.

 

RESTful API란?

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처입니다. REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다. REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있습니다. 쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있습니다.

  • 서버의 api가 적절하게 http를 준수하며 잘 설계되어있으면 RESTful 하게 설계되어 있다는 것
  • 예를들어 api의 리소스 식별자를 ex - (”/”) 중복 없이 고유하게 잘 만들고,
  • 해당 api에 적절하게 http메서드를 사용했다면, RESTful하게 설계했다고 볼 수 있다.

 

데이터베이스

데이터베이스는 데이터를 “효율적으로 성능 좋게” 다루기 위해 존재합니다.

즉 더 많이 저장하기 위해서가 아니라, 저장 조회 수정 삭제등을 더 빠르고 효율적으로 처리하기 위해서, “성능상의 이점”을 얻기 위해서 사용한다고 생각하면 좋을 것 같습니다.

이러한 맥락에서 데이터를 사용,활용하는 주체에 따라서 더 효율적인 방법이 각각 다르다 보니 다양한 형식의 데이터베이스가 존재하게 됩니다.

 

결론

결론적으로 서버 개발에서 그래도 가장 많이 하는 일은, “새로운 정보”와 “기존의 정보”를 가지고 “정해진 로직”을 수행하는 일

 

인터페이스

  • 인터페이스 : 개발 코드와 객체가 서로 통신하는 접점 역할
  • 개발 코드가 인터페이스의 메소드를 호출 → 인터페이스는 객체의 메소드를 호출
  • 인터페이스를 통해 개발 코드를 수정하지 않아도 사용하는 객체를 변경하는 방법을 통해 실행 내용과 리턴값을 다양화 할 수 있다.

 

https://velog.io/@jaeseok-go/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

 

인터페이스 선언

  • 인터페이스의 물리적 형태는 클래스와 동일하다. 그러나 소스를 작성할 때 선언하는 방법에 클래스와 차이가 있다.
  • 인터페이스 이름은 클래스 이름을 작성하는 방법과 동일하다. ( 첫 글자를 대문자로 나머지는 소문자로)
  • 인터페이스는 class 키워드 자리에 interface 키워드를 사용한다.

  • 인터페이스는 상수 필드와 추상 메소드만을 구성 멤버로 갖는다.
  • 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.

 

 

https://link2me.tistory.com/1742

 

상수 필드 선언 

  • 인터페이스는 데이터를 저장할 수 없기 때문에 상수 필드만 선언할 수 있다.
  • 상수 필드는 기본적으로 public static final 특성을 갖는다.
  • 관례적으로 필드 이름은 모두 대문자로 작성해야 하며, 선언 시 초기값을 대입해야 한다.

추상 메소드 선언

  • 인터페이스로 호출된 메소드는 객체에서 실행되므로 추상 메소드로 선언한다.
  • public abstract가 생략되고 메소드 선언부만 있는 추상 메소드 형태이다.
  • 구현 클래스는 반드시 추상 메소드를 재정의해야 한다.

 

 

인터페이스 구현

  • 인터페이스에서 객체의 메소드를 호출할 때, 객체는 인터페이스에 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다.
  • 이런 객체를 인터페이스의 구현(implement)객체라고 하고, 구현 객체를 생성하는 클래스를 구현 클래스라고 한다.

 

① 구현 클래스

  • 보통의 클래스와 동일한데, 클래스 선언부에 implements 키워드를 추가하고 인터페이스 이름을 명시한다.
  • 그리고 인터페이스에 선언된 추상 메소드의 실체 메소드를 선언해야 한다.
  • 주의점 : 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에, public보다 낮은 접근 제한으로 작성할 수 없다.
  • 인터페이스로 구현 객체를 사용하려면 다음과 같이 변수를 선언하고 구현 객체를 대입해야 한다.

 

② 다중 인터페이스 구현 클래스

 

https://velog.io/@00yubin00/%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4Interface

 

  • 객체는 그림과 같이 다수의 인터페이스 타입으로 사용할 수 있다.
  • 구현 클래스는 모든 인터페이스의 추상 메소드에 대해 셀체 메소드를 작성해야 한다. 

 

인터페이스 사용

  • 클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있다.
  • 인터페이스가 필드 타입으로 사용될 경우 : 필드에 구현 객체를 대입할 수 있다.
  • 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우 : new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.
  • 인터페이스가 로컬 변수 타입으로 사용될 경우 : 변수에 구현 객체를 대입할 수 있다.
  • 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우 : 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있다.
  • 대입이 된 후에는 재정의된 구현 객체의 메소드를 호출할 수 있다.

'Coding > Java' 카테고리의 다른 글

[25] JAVA 중첩 클래스/ 중첩 인터페이스  (0) 2022.12.09
[24] JAVA 타입 변환과 다형성  (0) 2022.12.06
[22] JAVA 추상클래스  (0) 2022.12.03
[21] JAVA 타입변환과 다형성  (1) 2022.12.02
[20] JAVA 상속  (0) 2022.11.30

추상 클래스

추상(abstract) : 실체 간에 공통되는 특성을 추출한 것

추상 클래스 : 실체 클래스들의 공통적인 특성(필드와 메소드)을 추출해서 선언한 클래스. 

실체 클래스 : 객체를 직접 생성할 수 있는 클래스

https://www.proprofs.com/quiz-school/story.php?title=abstract-classes

 

추상 클래스의 용도

① 공통된 필드와 메소드의 이름을 통일할 목적

  • 실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다.
  • 데이터와 기능이 동일한 필드나 메소드를 추상클래스에서 선언해줌으로써 더 간결하고 효율적인 코드 작성이 가능하다.

② 실체 클래스를 작성할 때 시간 절약

  • 공통되는 필드와 메소드를 추상클래스에 선언하면 다른 점만 실체 클래스에 선언하면 되기때문에 시간을 절약할 수 있다.
  • 일반적으로 개발 프로젝트에서 설계자와 코더는 다른 일을 수행하는데, 코더가 작성해야 할 클래스가 다수이고 이 클래스들이 동일한 필드와 메소드를 가져야 한다면 , 설계자는 이 내용들을 추려내어 추상 클래스로 설계 규칙을 만드는 것이 좋다.
  • 그리고 코더에게 추상 클래스를 상속하는 실체 클래스를 만들도록 요구하면 된다.

 

추상 클래스 선언

  • 추상 클래스를 선언할 때에는 선언에 abstract 키워드를 붙여야 한다.
  • abstract가 붙여진 추상클래스는 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다.
  • 따라서 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성해야 한다.
  • 추상 클래스는 새로운 클래스를 만들기 위해 부모 클래스로만 사용된다. 즉, 실체클래스를 만들 때 extends 뒤에만 붙을 수 있다.

 

추상 메소드와 재정의

  • 추상 클래스에는 메소드가 있을 수도 없을 수도 있다.
  • 그런데 만약 추상 메소드가 있다면, 꼭 추상 클래스 안에 선언되어야 한다.
  • 추상 클래스에서 메소드의 선언만 통일하고 실행 내용이 실체 클래스마다 다를 경우 추상 메소드를 선언할 수 있다.
  • 추상 메소드는 abstract 키워드와 함께 메소드의 선언부만 있고 메소드 실행 내용인 중괄호{}가 없는 메소드이다.
  • 자식 클래스(실체 클래스)는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생한다.

위의 예시를 보면, Animal 이라는 추상클래스에서 추상 메소드 sound() 를 선언했다. 이유는 동물들 마다 울음 소리가 다르기 때문에, 이 부분은 하위 클래스 마다 고유한 소리를 내도록, 즉 Dog 클래스 에서는 '멍멍'으로 실행이 되도록, Cat 클래스 에서는 '야옹'이 실행되도록 하기 위함이다. 하위 클래스인 Dog, Cat에서는 sound() 메소드를 재정의해서 사용한다.

 


※ 추상 클래스에대해 알아보다 인터페이스와의 차이에 대한 내용을 찾게되었는데, 다음에 공부할 내용인 인터페이스라 읽어 보면 좋을 것 같아서 참고용으로 가져와 봤다.

 

https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-java/

 

Difference between Abstract Class and Interface in Java

Abstract class vs Interface 

  • Type of methods: Interface can have only abstract methods. An abstract class can have abstract and non-abstract methods. From Java 8, it can have default and static methods also. From Java 9, it can have private concrete methods as well.
  • Final Variables: Variables declared in a Java interface are by default final. An abstract class may contain non-final variables.
  • Type of variables: Abstract class can have final, non-final, static and non-static variables. The interface has only static and final variables.
  • Implementation: Abstract class can provide the implementation of the interface. Interface can’t provide the implementation of an abstract class.
  • Inheritance vs Abstraction: A Java interface can be implemented using the keyword “implements” and an abstract class can be extended using the keyword “extends”.
  • Multiple implementations: An interface can extend one or more Java interfaces; an abstract class can extend another Java class and implement multiple Java interfaces.
  • Multiple Inheritance:  Interface supports multiple inheritance; an abstract class does not support multiple inheritance.
  • Accessibility of Data Members: Members of a Java interface are public by default. A Java abstract class can have class members like private, protected, etc.

'Coding > Java' 카테고리의 다른 글

[24] JAVA 타입 변환과 다형성  (0) 2022.12.06
[23] JAVA 인터페이스  (0) 2022.12.04
[21] JAVA 타입변환과 다형성  (1) 2022.12.02
[20] JAVA 상속  (0) 2022.11.30
[19] JAVA 패키지와 접근 제한자  (0) 2022.11.29

 

  • 기본 타입 변환 처럼 클래스에서도 타입 변환이 있다.
  • 다형성 : 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록 하는 성질 
  • 다형성을 구현하려면 상속, 메소드 재정의타입변환이 필요하다.

1. 자동 타입 변환

  • 자동 타입 변환(promotion)이란 ? 프로그램 실행 도중에 자동으로 타입 변환이 일어나는 것
  • 클래스의 변환은 상속 관계에 있는 클래스 사이에서 발생한다.

  • 자동 타입 변환의 개념은 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다는 것
  • 따라서 자식은 부모 타입으로 자동 타입 변환이 가능하다.
  • 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입 이라면 자동 타입 변환이 일어날 수 있다.
  • 즉, 아래의 그림에서 D객체는 바로 위의 부모인 B타입으로 자동 타입 변환이 될 수도 있고, A 타입으로 자동 타입 변환이 될 수 있다.

 

https://hyuntaekhong.github.io/blog/java-basic21/

 

  • 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다.
  • 그러나 예외가 있는데, 메소드가 자식클래스에서 재정의 되는 경우이다. 이땐 자식 클래스의 메소드가 대신 호출된다. (다형성)

출처 : <혼자 공부하는 자바>

  • Child 객체는 method3() 메소드를 가지고 있지만, Parent 타입으로 변환된 이후에는 method3()을 호출할 수 없다.
  • 그러나 부모와 자식 모두에게 있는 method2()는 재정의를 통해 타입 변환 이후에도 호출이 가능하다.

 

 

2. 필드의 다형성

  • 자동 타입 변환이 왜 필요할까? 다형성을 구현하기 위해서이다.
  • 다형성을 구현하는 법 : 상속 + 재정의 + 타입 변환
  • 필드의 타입을 부모 타입으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 있다. 
  • 자식 클래스는 부모의 메소드를 재정의해서 메소드의 실행 내용을 변경함으로써 더 우수한 실행 결과가 나오게 할 수 있다.

  • 예를 들어, 부모 클래스인  Tire의 필드값을 자식 클래스인 HankookTire에서 필드값을 교체함으로써 부모클래스의 메소드를 수정하지 않아도 자식클래스에서 다양한 메소드를 실행할 수 있는 것! 
  • 더보기
    Tire 클래스가 Car 클래스와 같은 패키지에 있다고 가정하자. 그렇다면 Car 클래스는 Tire클래스를 사용할 수 있다. 그래서 Car 클래스에서 Tire클래스로 각 바퀴에 대한 객체를 만들었다. 바퀴의 수명이 다하면 새로운 객체로 바꿔주려고 한다. Tire 클래스를 부모 클래스로 하는 자식 클래스 Hankook과 Kumho 를 만들고 타이어 교체시기가 되면 해당 위치의 타이어를 hankook이나 kumho 클래스로 새로운 객체를 만들어서 교체해줄 수 있다. 이때 hankook과 kumho 클래스의 roll을 재정의했을 경우 이전에 사용했던 roll과는 다르게 작동한다. 이렇게 다양한 자식 객체를 넣어 결과가 달라지는 것을 다형성이라고 한다.

 

 

 

3. 매개 변수의 다형성

  • 자동 타입 변환은 필드의 값을 대입할 때에도 발생하지만, 주로 메소드를 호출할 때 많이 발생한다.
  • 메소드 호출 시 매개값으로 부모 객체 및 모든 자식 객체를 제공할 수 있다. 
  • 매개 변수의 다형성은 매개값으로 어떤 자식 객체가 제공되느냐에 따라 메소드의 실행결과가 다양해 질 수 있다.
  • 자식 객체가 부모의 메소드를 재정의 했다면 재정의된 메소드를 호출함으로써 메소드의 실행결과가 다양해 진다.

 

 

 

4. 강제 타입 변환

  • 강제 타입 변환(casting) : 부모 타입을 자식 타입으로 변환하는 것
  • 자식 타입이 부모 타입으로 자동 타입 변환한 후 다시 자식 타입으로 변환할 때만 적용된다.
  • 자식 타입이 부모 타입으로 자동 타입 변환하면, 부모에 선언된 필드와 메소드만 사용 가능한데,
  • 만약 자식에 선언된 필드와 메소드를 사용하고 싶다면, 자식 타입으로 다시 강제 타입 변환해서 자식의 필드와 메소드를 사용한다.

 

 

 

 

5. 객체 타입 확인

  • 어떤 객체가 어떤 클래스의 인스턴스인지 확인하기 위해 instanceof 연산자를 사용한다.
  • instanceof 연산자는 주로 매개값의 타입을 조사할 때 사용된다.
  • 메소드 내에서 강제 타입 변환이 필요할 경우 반드시 매개값이 어떤 객체인지 확인하고 안전하게 강제 타입 변환을 해야 한다.
  • 만약 타입을 확인하지 않고 강제 타입 변환을 시도하면 - ClassCastException이 발생할 수 있다.
// 사용법
boolean result = 객체 instanceof 타입

// Parent가 부모 클래스고 Child가 자식 클래스라고 가정하자.
Parent parent = new Parent();

// parent라는 객체가 Child로부터 만들어진 객체냐?
parent instanceof Child // false // classcastexception 발생

// Child 객체가 자동 타입 변환으로 parent에 대입됨
Parent parent = new Child();

// 활용법
public void method(Parent parent){
    // parent는 child 객체가 자동 타입 변환된 경우이므로 true
    if (parent instanceof Child){
        // 강제 타입 변환 조건에 맞으므로 강제 타입 변환 가능
        Child child = (Child) parent;
    }
}

참고자료

 

'Coding > Java' 카테고리의 다른 글

[23] JAVA 인터페이스  (0) 2022.12.04
[22] JAVA 추상클래스  (0) 2022.12.03
[20] JAVA 상속  (0) 2022.11.30
[19] JAVA 패키지와 접근 제한자  (0) 2022.11.29
[18] JAVA 인스턴스(객체) Instance  (0) 2022.11.27

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.named-queries

 

Spring Data JPA - Reference Documentation

Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

https://tecoble.techcourse.co.kr/post/2020-04-26-Method-Naming/

 

좋은 코드를 위한 자바 메서드 네이밍

tecoble.techcourse.co.kr

 

'Coding > 기타' 카테고리의 다른 글

ChatGPT !! 엄청나다 !!  (0) 2023.01.10
HTTP 이해  (0) 2022.12.06
RESTful API 설계 가이드  (0) 2022.12.01
Error : Address already in use 오류 해결하기  (0) 2022.11.04
피그마 figma  (0) 2022.10.27

+ Recent posts