카테고리 없음
[Annotation] Annotation의 이해
hee-ya07
2025. 4. 17. 11:19
0. Annotation
:: 소스코드에 추가적인 정보를 표기하는 메타 데이터로, 주석(라벨)로 생각하면 된다.
0.1 분류
분류 | 어노테이션 | 설명 |
1. Built-in Annotations |
@Override | 오버라이드된 메서드임을 명시 |
@Deprecated | 더 이상 사용되지 않음을 표시 | |
@SuppressWarnings | 컴파일러 경고 미표기 | |
@FunctionalInterface | 함수형 인터페이스임을 명시 | |
@SafeVarargs | 제네릭 가변 인자(varargs) 사용 시, 타입 안정성 경고 억제 | |
2. Meta-Annotations |
@Target | 어노테이션을 어디에 사용할 수 있는지 지정 (예: 클래스, 메서드 등) |
@Retention | 어노테이션이 언제까지 유지될지 설정 (컴파일 타임 vs 런타임 등) | |
@Documented | Javadoc에 표시 여부 | |
@Inherited | 부모 클래스의 어노테이션을 자식 클래스에 상속할지 여부 |
더보기
추가적인 분류를 하자면,
1. Java 어노테이션 (Built-in Annotations)
어노테이션 | 설명 |
@Override | 부모 클래스 또는 인터페이스의 메서드를 오버라이딩했음을 명시 |
@Deprecated | 해당 요소(클래스, 메서드 등)는 더 이상 사용되지 않으며, 향후 제거될 수 있음을 표시 |
@SuppressWarnings | 컴파일러의 경고 메시지를 억제할 수 있음 |
@FunctionalInterface | 함수형 인터페이스임을 나타냄 (람다식에 사용 가능) |
@SafeVarargs | 제네릭 가변 인자(varargs) 사용시 타입 안정성 경고 억제 |
2. Lombok 어노테이션
:: 보일러플레이트 코드를 대신 해주는 라이브러리의 어노테이션
어노테이션 | 설명 |
@Getter, @Setter | 모든 필드에 대한 getter/setter 자동 생성 |
@ToString | toString() 자동 생성 |
@EqualsAndHashCode | equals()와 hashCode() 자동 생성 |
@NoArgsConstructor | 파라미터 없는 생성자 생성 |
@AllArgsConstructor | 모든 필드에 대한 생성자 생성 |
@RequiredArgsConstructor | final 필드 또는 @NonNull 필드만을 인자로 받는 생성자 생성 |
@Data | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 포함 |
@Builder | 빌더 패턴 생성 |
@Value | @Data + final + immutable 객체 생성용 |
3. Spring AOP 어노테이션 (프록시 기반)
:: 관점 지향 프로그래밍(AOP)를 통해 공통 기능 모듈화
:: 내부적으로는 프록시 기반 작동
어노테이션 | 설명 |
@Aspect | 해당 클래스가 AOP 관점(Aspect)임을 명시 |
@Before | 타겟 메서드 실행 이전에 수행될 Advice |
@After | 타겟 메서드 실행 후 수행 (성공/예외 관계없이) |
@AfterReturning | 타겟 메서드가 정상 종료되면 수행 |
@AfterThrowing | 타겟 메서드에서 예외 발생 시 수행 |
@Around | 타겟 메서드의 전/후 모두 제어 가능 (가장 강력한 Advice) |
@Pointcut | 공통 포인트컷 분리 선언 |
4. Spring 어노테이션 (전반적인 분류)
:: 뭔가 많음
4-1. Bean 등록 및 컴포넌트 스캔
어노테이션 | 설명 |
@Component | Spring Bean으로 등록 |
@Service | 비즈니스 로직 담당 컴포넌트 (실제로는 @Component와 기능 같음) |
@Repository | DAO 계층에 사용, 예외 변환 기능 포함 |
@Controller | MVC Controller용 컴포넌트 |
@RestController | @Controller + @ResponseBody, JSON 응답에 주로 사용 |
@Configuration | 설정 파일 클래스 |
@Bean | 개발자가 직접 Bean 등록 |
@ComponentScan | Bean 스캔 범위 지정 |
4-2 의존성 주입 (DI)
어노테이션 | 설명 |
@Autowired | 타입 기준 의존성 주입 |
@Qualifier | 이름 기준으로 Bean 주입 |
@Value | properties 값 주입 |
@Inject | @Autowired와 유사 |
@RequiredArgsConstructor (Lombok) | 생성자 기반 의존성 주입에 자주 사용 |
4-3. Spring Web (MVC)
어노테이션 | 설명 |
@RequestMapping | URL 매핑, 메서드 단위로 GET/POST 등 설정 가능 |
@GetMapping, @PostMapping 등 | HTTP 메서드 별 단축 어노테이션 |
@RequestParam | URL 쿼리 파라미터 바인딩 |
@PathVariable | URL 경로 변수 바인딩 |
@RequestBody, @ResponseBody | JSON <-> 객체 변환 자동 처리 |
4-4. Spring Test 관련
어노테이션 | 설명 |
@SpringBootTest | 통합 테스트용 어노테이션 |
@WebMvcTest | Controller 단위 테스트 |
@MockBean | 테스트 중 특정 Bean을 Mock 처리 |
@DataJpaTest | JPA 관련 테스트에 최적화된 설정 |
4-5. Spring Boot
어노테이션 | 설명 |
@SpringBootApplication | @Configuration + @EnableAutoConfiguration + @ComponentScan 포함 |
@EnableAutoConfiguration | 의존성에 따라 자동 설정 수행 |
@ConfigurationProperties | properties/yaml 설정을 POJO에 바인딩 |
1. Annotation 정의 방법
1.1. @Target
:: WHERE 어디에 부착할 수 있는지
@Target(ElementType.METHOD) // 해당 어노테이션은 메서드만 적용 가능
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
==> 범위가 옆의 표와 같이 정해짐
1.2. @Retention
:: WHEN 언제 사용(해당 어노테이션의 생명주기)
1.3. 나머지 설정들
- @Documented : JAVADOC 에 어노테이션 설정을 표기
- @Inherited : 어노테이션도 상속을 할 수 있다.
- @Repeatable : 동일 어노테이션을 여러번 선언할 수 있다.
참조
asac 수업자료
[SpringDoc] annotation
API docs를 편하게 자동으로 생성해주는 것이 OpenAPI3.0 spec을 이용하여 구현한 SpringDoc이다. API Docs 작성을 도와주는 건 Springfox Swagger와 SpringDoc 두 가지가 있는데, Springfox Swagger는 2020
velog.io