어노테이션
코드에 메타데이터를 붙이는 방법입니다. @ 기호로 시작하며, 컴파일러나 프레임워크에게 "이 코드를 이렇게 처리해줘"라고 알려줍니다.
왜 필요한가?
- 설정 코드를 줄이고 간결하게 표현
- 컴파일 시점에 에러 검출
- 프레임워크가 자동으로 처리할 수 있게 정보 제공
Java 기본 어노테이션
| 어노테이션 | 용도 |
| @Override | 메서드 오버라이드 명시 |
| @Deprecated | 더 이상 사용 권장하지 않음 |
| @SuppressWarnings | 컴파일러 경고 무시 |
| @FunctionalInterface | 함수형 인터페이스 명시 |
예시
// 기본 어노테이션
public class Child extends Parent {
@Override // 부모 메서드 오버라이드임을 명시
public void sayHello() {
System.out.println("Hello");
}
}
// Spring 어노테이션
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}
Spring에서 자주 쓰는 어노테이션
어노테이션 동작 시점
| 시점 | 설명 | 예시 |
| SOURCE | 컴파일 전까지만 유지 | @Override |
| CLASS | 클래스 파일까지 유지 | 기본값 |
| RUNTIME | 런타임에도 유지 | @Controller |
커스텀 어노테이션 만들기
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
// 사용
@LogExecutionTime
public void someMethod() { ... }
어노테이션 vs XML 설정
| 항목 | 어노테이션 | XML |
| 위치 | 코드와 함께 | 별도 파일 |
| 가독성 | 직관적 | 분리되어 파악 어려움 |
| 변경 | 재컴파일 필요 | 재시작만 필요 |
| 현재 추세 | 선호됨 | 레거시 |