반응형
Java 기반 framework를 사용하는 회사에 이직하게 되어 Spring Boot에 대해 공부하고 있다.
골뱅이가 붙은 단어들이 많이 보였다.
NodeJS + express 기반 Backend에 익숙하고, Java의 기본 문법만 아는 나에게 다소 생소한 내용이었다.
@의 정체에 대해 살펴보기로 했다.
1. Annotation 이란?
@something은 Annotation (어노테이션)이라고 한다.
Annotation은 Java의 소스코드에 메타데이터를 추가하는 구문이다. Class, methods, variables, parameters, Java package 등 대부분의 코드에 annotation을 달 수 있다.
2. Annotation의 종류
Built-in annotation
Java code에서 제공하는 기본 annotation
- @Override : 매서드가 부모 클래스 혹은 인터페이스의 요구사항과 매치되는지 확인하는 역할
- @Deprecated : 매서드를 사용하지 않음으로 표시하여 명시한 매더스가 다른 곳에서 사용되는 경우 컴파일 경고를 일으키는 역할
- @ SuppressWarnings : 컴파일러에게 경고를 표시하지 않도록 지시하는 역할
이외의 Java 어노테이션 종류는 @Retention, @Documented, @Target, @Inherited 등이 있다.
관련 내용은 위키를 참고하면 좋을 것 같다. 링크
Custom annotations
다음과 같이 사용자 정의 annotation을 만들 수 있다.
Annotation은 인터페이스 앞에 @를 붙여서 만든다.
// Case 1
public @interface Twizzle {
}
@Twizzle
public void toggle() {
}
// Case 2
public @interface Edible {
boolean value() default false;
}
@Edible(true)
Item item = new Carrot();
// Case 3
public @interface Author {
String first();
String last();
}
@Author(first = "Oompah", last = "Loompah")
Book book = new Book();
// Case 4
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface AliasFor {
@AliasFor("attribute")
String value() default "";
@AliasFor("Value")
String attribute() default "";
Class<? extends Annotation> annotation() defalut Annotation.class;
}
public @interface WebMvcTest {
String[] properties() default {};
@AliasFor("controllers")
Class<?>[] value default {};
@AliasFor("Value")
Class<?>[] value controllers() default {};
boolean useDefaultFilters() default true;
Filter[] includeFilters() default {};
Filter[] exculudeFilters() default {};
@AliasFor(annotation = ImportAuthConfiguration.class, attribute = "exclude")
Class<?> excludeAutoConfiguration() default {};
}
@WebMvcTest(TodoCotroller.class)
class ControllerTest {
}
Spring Boot 코딩할때 annotation 엄청 나온다. 아직은 의미를 모르는 custom annotation들이 대부분이다.
하나씩 파악하고, 사용에 익숙해 지도록 노력해야겠다.
반응형
'프로그래밍 > Spring Boot' 카테고리의 다른 글
객체지향 프로그래밍 정리 #1 (0) | 2021.11.19 |
---|---|
Springboot 프로젝트 생성하기 (0) | 2021.08.16 |
IntelliJ 단축키 (0) | 2021.08.08 |
Lombok (0) | 2021.08.08 |