티스토리 뷰
자바 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을 통해 빈으로 등록되는 이유는 이것입니다.
이렇게 하여 스프링 부트의 특징과 문법들을 살펴보았습니다.
다음 장에서는 스프링 부트의 구조에 대해 학습하겠습니다.