티스토리 뷰

반응형

자바 17버전부터 추가된 문법들입니다.

 

텍스트 블록

여러 줄의 텍스트를 작성할 때 """로 감싼 텍스트를 사용해서 여러 줄의 텍스트를 표현할 수 있습니다.

 

String query17 = """
	SELECT * FROM "items"
    WHERE "status" = "SALE"
    ORDER BY "price";
    """;

 

formatted() 메서드

값을 파싱하기 위해서 사용합니다. 해당 기능이 없었을 때 아주 불편했다고 합니다.(확실히 다른 언어에 비교해서 힘들었을 것 같긴 합니다.)

String textBlock17 ="""
{
	"id : %d
    "name" : %s,
}
""".formatted(2, "juice")

 

레코드

레코드는 데이터 전달을 목적으로 하는 객체를 더 빠르고 간편하게 만듭니다.

레코드는 상속을 할 수 없고, 파라미터에 정의한 필드는 private final로 정의됩니다.

또 레코드는 gether를 자동으로 만들기 떄문에 에너테이션이나 메서드로 게터 정의를 하지 않아도 괜찮습니다.

 

record Item(String name, int price) {
 //파라미터가 private final로 정의
}
Item juice = new Item("juice", 3000);
juice.price(); // 3000

 

패턴 매칭

패턴 매칭은 instanceof 키워드를 쉽게 사용할 수 있게 해줍니다.

이제는 바로 형변환을 하고 사용할 수 있습니다.

 

//11 ver
if (o instanceof Integer) {
 Integer i = (integet) o;
 ...
}

//17 ver
if (o instanceof Integer i) {
...
}

 

자료형에 맞는 case 처리

switch-case 문으로 자료형에 맞게 case 처리도 가능합니다.

static double getIntegerValue(Object o){
	return switch (o) {
    case Double d -> d.intValue();
    case Float f -> f.intValue();
    case String s -> Integer.parseInt(s);
    defalut -> 0d;
   };
}

 

 

스프링 부트 3 코드 이해

SpringBottDeveloperApplication.java 파일 열기

@SpringBootApplication
public class SpringBootDevelperApplication {
    public  static void main(String[] args){
        SpringApplication.run(SpringBootDevelperApplication.class, args);
    }
}

 

이 클래스는 자바의 main() 메서드와 같은 역할입니다.

여기서 스프링부트가 시작되며, @SpringBootApplication 에너테이션은 스프링 부트 사용에 필요한 기본 설정을 해줍니다.

 

SpringApplication.run() 메서드는 애플리케이션을 실행합니다. 첫번째 인수는 메인 클래스로 사용할 크래스, 두번째 인수는 커맨드 라인의 인수들을 전달하게 됩니다.

 

@SpringBootApplication을 ctrl을 누른 상태에서 마우스 클릭하면 다음과 같은 코드들이 나옵니다.

 

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

....

 

 

@SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration 3개의 에너테이션을 이해하면 스프링 부트를 이해하는 데 도움이 됩니다.

 

@SpringBootConfiguration

스프링 부트 관련 설정을 나타내는 애너테이션입니다.

스프링의 Configuration을 상속해서 만든 에너테이션입니다.

 

@ComponentScan

사용자가 등록한 빈을 읽고 등록하는 에너테이션입니다.

이 에너테이션은 @Component 라는 에너테이션을 가진 클래스들을 찾아 빈으로 등록하지만, 모든 빈에 @Component만 사용하는 게 아닙니다. 실제 개발을 하면 @Component 에너테이션보다는 용도에 따라 다른 에너테이션을 사용합니다.

 

@Configuration : 설정 파일 등록

@Repository : ORM 매핑

@Contoller, @RestController : 라우터

@Service : 비즈니스 로직

 

@EnableAutoConfiguration

자동 구성을 활성화하는 에너테이션입니다. 서버가 실행될 때 스프링 부트의 메타 파일을 읽고 정의된 설정들을 자동으로 구성합니다.

spring.factories 파일의 클래스들이 모두 @EnableAutoConfiguration을 사용할 때 자동으로 설정됩니다.

 

테스트 컨트롤러 

이제 테스트 컨트롤러를 살펴봅시다.

 

TestController.java

 

@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        return "Hello, world!";
    }
}

 

/test GET 요청이 들어오면 test() 메서드를 실행합니다.

 

@REstController는 그 중에서도 라우터 역할을 합니다. HTTP 요청과 메서드를 연결하면서, 클라이언트의 요청에 맞는 메서드를 실행할 수 있습니다.

 

@RestController와 @Component는 에너테이션 용어가 다르지만 같은 @Compnent처럼 취급됩니다.

왜냐하면 RestController에 다음과 같이 정의되어 있기 때문입니다.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

 

위에서 @Controller 에너테이션에 대해서 언급했습니다. @Controller 에너테이션에 ResponseBodt 에너테이션이 합쳐져 RestController 에너테이션이 되어 있습니다.

 

그래서 결국 Controller 에너테이션으로 또 이동하면 @Component 에너테이션이 있음을 알 수 있습니다.

@Controller 에너테이션이 @ComponetScan을 통해 빈으로 등록되는 이유는 이것입니다.

 

이렇게 하여 스프링 부트의 특징과 문법들을 살펴보았습니다.

다음 장에서는 스프링 부트의 구조에 대해 학습하겠습니다.

반응형