728x90
어노테이션
- 사전적으로는 '주석'이라는 의미를 가짐
- 소스 코드에 추가해서 사용할 수 있는 메타 데이터의 일종
- 앞에 @기호를 붙여 사용하고 JDK 1.5버전 이상에서 사용 가능
어노테이션의 용도
- 컴파일러에게 토드 작성 문법 에러를 체크하도록 정보 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
- 런타임 시 특정 기능을 실행하도록 정보 제공
어노테이션 사용 순서
- 어노테이션 정의
- 클래스에 어노테이션 배치
- 코드가 실행되는 중에 Reflection을 이용해 추가 정보를 획득해 기능 실시
어노테이션 사용 효과
- 코드 가독성 향상
- 코드에 추가 정보를 제공해 코드를 이해하기 쉽게 만듦
- 메소드, 변수, 클래스에 대한 설명을 포함해 다른 사람들이 코드를 이해하는 데 도움을 줌
- 코드 문서화
- 자바와 같은 정적 타입 언어에서 메소드의 매개변수, 반환 유형, 예외 등에 대한 정보를 제공해 자동 문서화를 할 수 있음
- 컴파일 타임 체크
- @Nullable과 같은 몇 어노테이션은 컴파일러에게 특정 규칙을 적용하도록 지시함
- 코드의 안정성을 향상시킬 수 있음
- 코드 검증 및 분석
- @Valid를 이용해 파라미터를 검증할 수 있는 것처럼 코드를 검증해줄 수 있음
어노테이션 관련해서는 작년에 관련 책 내용 정리해둔 글이 있어서 해당 링크를 아래에 걸어둘테니까 글이 궁금하신 분들은 아래 링크로,,😉
https://yestruly.tistory.com/60
커스텀 어노테이션 만드는 방법
- @interface, @Target, @Retention 를 사용해 어노테이션 선언
- @interface로 어노테이션 선
- @Target : 대상타임 설정
- @Retention : 유효 시간 설정
- 어노테이션에 포함될 요소 정의. 메소드와 유사하고 기본값을 가질 수 있음
- 필요시 어노테이션에 대한 옵션을 추가로 지정해줄 수 있음
- 어노테이션 적용
- 커스텀 어노테이션을 이용해 프로그램 요소에 메타 데이터 제공
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) // 어노테이션을 런타임까지 유지, 런타임 시 검사 이뤄짐
@Target(ElementType.METHOD) // 어노테이션을 METHOD에 적용할 수 있음
public @interface CustomAnnotation {
String value() default " ";
int priority() default 0;
boolean isTrue() default false; //추가요소 정의
}
class MyClass {
@MyCustomAnnotation(value="HelloWorld", priority=2, isTrue=true)
public void myMethod() {
//메소드 내용 입력해서 사용
}
}
class AnnotationProcessor {
public static void main(String[] args) throws Exception {
MyClass obj = new MyClass();
for (var method : obj.getClass().getDeclaredMethods()) {
if (method.isAnnotationPresent(MyCustomAnnotation.class)) {
MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class);
System.out.println("Value: " + annotation.value());
System.out.println("Priority: " + annotation.priority());
}
}
}
}
728x90
'Spring' 카테고리의 다른 글
[인프런 워밍업 클럽] BE 3번째 과제 - 람다식 (0) | 2024.02.21 |
---|---|
[인프런 워밍업 클럽] BE 2번째 과제 - GET, POST API 만들기 (0) | 2024.02.20 |
[스프링 프레임워크] 7. 요청 파라미터 취득하기 (0) | 2023.10.25 |
[스프링 프레임워크] 5. MVC 모델 알아보기 (1) | 2023.10.17 |
[스프링 프레임워크] 4. 데이터베이스 작업 (1) | 2023.10.14 |