데브허브 | DEVHUB | [10분 테코톡] 듀이의 Annotation, 알고 사용하시나요?[10분 테코톡] 듀이의 Annotation, 알고 사용하시나요?
- 등장 배경: XML 설정 파일과 자바 코드의 분리 관리로 인한 복잡성 및 버전 불일치 문제를 해결하기 위해 자바 코드 내에 설정을 포함하는 방식으로 등장했습니다. 📜
- 정의 및 역할: 프로그래밍 언어에 영향을 주지 않으면서 컴파일러, 빌드 도구, 또는 다른 프로그래머에게 유익한 정보를 제공하는 메타데이터의 한 형태입니다. 💡
- 컴파일러 정보 제공:
@Override처럼 컴파일러에게 메서드 오버라이딩 정보를 제공하여 오류를 감지하고 개발자를 돕습니다. 🐞
- 코드 자동 생성: Lombok의
@Getter, @Setter처럼 빌드 도구가 보일러플레이트 코드를 자동으로 생성하도록 정보를 제공합니다. 🛠️
- 런타임 동작 제어: Spring의
@Controller, @RequestMapping처럼 프로그램 실행 중에 특정 로직이나 동작을 제어하는 정보를 제공합니다. ⚙️
- 메타 어노테이션: 어노테이션을 정의할 때 사용되는 어노테이션으로,
@Target, @Retention, @Documented 등이 있습니다. 🏷️
@Target: 어노테이션이 적용될 수 있는 위치(클래스, 메서드, 필드 등)를 지정합니다. 🎯
@Retention: 어노테이션 정보가 유지되는 시점(컴파일 직전, 클래스 파일, 런타임)을 지정합니다. ⏳
@Documented: 어노테이션 정보를 Javadoc 문서에 포함시킬지 여부를 결정합니다. 📄
- 동작 원리 (컴파일 시점):
Annotation Processor를 통해 컴파일 시점에 어노테이션을 분석하고 코드를 생성하거나 처리합니다 (예: Lombok). 🧠
- 동작 원리 (런타임 시점):
Reflection 기능을 활용하여 실행 중에 클래스, 메서드, 필드 정보를 동적으로 조회하고 조작하여 어노테이션의 로직을 수행합니다 (예: Spring MVC). 🚀
- 커스텀 어노테이션:
@interface 키워드와 메타 어노테이션을 활용하여 개발자가 직접 정의하고 구현할 수 있으며, 특정 로직을 수행하도록 만들 수 있습니다. ✍️
- 장점: 코드와 설정의 통합 관리로 의존성 감소, 보일러플레이트 코드 제거로 가독성 향상, 커스텀 어노테이션을 통한 유지보수 및 확장성 증대입니다. ✅