스프링 부트3 컨셉, 자바17

cornpip·2023년 5월 30일
0

스프링 부트

목록 보기
1/10
post-thumbnail

concept

IoC

Inversion of Control

public class A{
	b = new B();
}

위와 같은 코드는 b를 A에서 직접 생성한다.
제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아닌 외부에서 관리하는 객체를 가져와 사용하는 것을 말한다.

(1)
public class A{
	private B b;	
}

위와 같이 b를 직접 생성하지 않고 어디선가 받아온다.

DI

Dependency Injection

IoC를 구현하기 위해 사용하는 방식이다.

public class A{
	@Autowired
    B b;
}

@Autowired애너테이션은 스프링 컨테이너에서 빈을 주입한다.
객체의 주입과 관리는 스프링 컨테이너에 의해 이루어지고 컨테이너에서 객체를 관리하는 것은 생성, 소멸 등의 관리에 일관성을 준다.

구조

기본적으로 controller, service, repository 로 다룬다.
순서대로 프레젠테이션 계층, 비즈니스 계층, 퍼시스턴스 계층 이라고도 말한다.

스프링 부트 스타터로 시작했을 때, 기본적으로 톰캣이 요청을 처리하는 듯 하다.

요청-응답 흐름
/test GET요청 -> 디스패처 서블릿이 URL분석 및 컨트롤러 매칭 -> 비즈니스, 퍼시스턴스 계층 지나면서 필요한 데이터 가져옴 -> 뷰 리졸버가 템플릿 엔진을 이용해 HTML문서, JSON, XML 등의 데이터를 생성 -> 응답

일단 응답까지 흐름에 디스패처 서블릿 , 뷰 리졸버 라는 구조가 있다는 걸 알아두자.

java17

스프링 부트2는 자바8 이상을
스프링 부트3은 자바17 이상을 사용한다.

텍스트 블록

자바 17은 다음과 같은 텍스트 블록이 가능하다.

    String query = "SELECT * FROM \"items\"\n" +
            "WHERE \"status\" = \"ON_SALE\"\n";

    String query17 = """
            SELECT * FROM "items"
            WHERE "status" = "ON_SALE"
            """;

파싱을 위한 formatted() 도 제공한다.

    String text17 = """
            {
                "id" : %d,
                "name" : %s,
            }
         	""".formatted(1, "choi");

레코드

    record Item(String name, int price) {
      // 파라미터가 private final로 자동 정의
    }
    Item a = new Item("car", 1000);
    a.price(); //자동 getter

레코드는 상속할 수 없고 파라미터에 정의한 필드는 private final로 정의된다.
그리고 getter를 자동으로 만들기 때문에 애너테이션이나 메서드로 getter정의를 하지 않아도 된다.

패턴 매칭

        if (o instanceof Integer){
            Integer i = (integer) o;
        }
        if (o instanceof Integer){
            //17버전 자동 형변환
        }

자동으로 형변환이 진행된다.

자료형에맞는 case처리

java17로 지정한 내 intellij에선 err가 나더라 ( 일단 pass )

profile
https://cornpip.tistory.com 티스토리로 이전했습니다!

0개의 댓글