[인프런 워밍업 스터디 1기] 1일차 진도표
어노테이션을 사용하는 이유 (효과) 는 무엇일까?
어노테이션은 사전적 의미로 주석이라는 뜻을 가지고 있다. 자바에서 어노테이션은 소스 코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야 할 데이터가 아니라 컴파일 및 런타임 과정에서 코드를 어떻게 처리해야 할지 알려주기 위한 추가 정보이다. 자바 어노테이션은 JDK 1.5 버전 이상에서부터 사용가능하며, 자바 어노테이션은 클래스 파일에 임베드되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작한다. 어노테이션이 나오기 이전에는 XML 및 마커 인터페이스를 통해 추가적인 정보를 제공할 수 있었다.
[ 어노테이션 장점 ]
코드 가독성 : 어노테이션은 코드와 설정을 같은 위치에 배치하므로 읽고 이해하기 쉽다. 클래스, 메서드, 필드, 파라미터 등 연관된 코드와 가까이 있기 때문에 흐름을 따라가기 쉽다.
설정의 간소화 : 별도의 설정 파일 작성 없이 어노테이션 적용을 통해 설정을 간소화할 수 있다.
중복 코드 제거 : 공통적인 코드 패턴이나 설정을 재사용할 수 있기 때문에 코드의 중복을 줄이고 효율적으로 코드를 작성할 수 있다.
커스텀 어노테이션 : 직접 커스텀 어노테이션을 정의함으로 필요한 기능이나 제약 사항을 정의하여 사용할 수 있다.
프로세서를 통한 검증 및 코드 생성 : 어노테이션 프로세서를 이용해 컴파일 시점에 어노테이션을 처리하고 검증할 수 있다. 또한 코드를 자동으로 생성하거나 수정할 수 있기에 효과적으로 기능을 구현할 수 있다.
나만의 어노테이션은 어떻게 만들 수 있을까?
메타 어노테이션의 종류는 다음과 같다.
@Retention : 컴파일러가 어노테이션을 다루는 방법을 기술, 어느 시점까지 영향을 미치는지를 결정
RetentionPolicy.SOURCE : 컴파일 전까지만 유효
RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효
RetentionPolicy.RUNTIME : 컴파일 이후 런타임 시기에도 JVM에 의해 참조가 가능(리플렉션)
@Target : 어노테이션 적용할 위치 선택
ElementType.PACKAGE : 패키지 선언
ElementType.TYPE : 타입 선언
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
ElementType.CONSTRUCTOR : 생성자 선언
ElementType.FIELD : 멤버 변수 선언
ElementType.LOCAL_VARIABLE : 지역 변수 선언
ElementType.METHOD : 메서드 선언
ElementType.PARAMETER : 전달인자 선언
ElementType.TYPE_PARAMETER : 전달인자 타입 선언
ElementType.TYPE_USE : 타입 선언
@Documented : 해당 어노테이션을 Javadoc에 포함시킴
@Inherited : 어노테이션의 상속을 가능하게 함
@Repeatable : Java8 부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 함
ㅁ사용자 정의 어노테이션 정의
import java.lang.annotation.*;
// 메타 어노테이션을 활용하여 사용자 정의 어노테이션 선언
@Target(ElementType.TYPE) // 어노테이션 적용 대상 Type으로 설정
@Retention(RetentionPolicy.RUNTIME) // 런타임 시까지 어노테이션을 사용
public @interface CustomAnnotation {
int age() default 20; // default로 20 설정
String name();
}
출처: https://ittrue.tistory.com/158 [IT is True:티스토리]
ㅁ사용자 정의 어노테이션 사용
import java.lang.annotation.*;
// 메타 어노테이션을 활용하여 사용자 정의 어노테이션 선언
@Target(ElementType.TYPE) // 어노테이션 적용 대상 Type으로 설정
@Retention(RetentionPolicy.RUNTIME) // 런타임 시까지 어노테이션을 사용
public @interface CustomAnnotation {
int age() default 20; // default로 20 설정
String name();
}
출처: https://ittrue.tistory.com/158 [IT is True:티스토리]
댓글을 작성해보세요.