- [ 배경 ]
- 어노테이션 이란?
- 어노테이션은 Java5 부터 새롭게 추가된 요소.
- 소스코드에 메다코드를 주는것.
- 데이터의 유효성 검사 등을 쉽게 할 수 있다, 코드가 깔끔해진다.
- 메타 데이터의 역할을 한다.
- 메타 데이터란: 데이터를 위한 데이터 즉,
설명을 의미하는 데이터.(자신의 정보를 담고있는 데이터 이다.)
- 메타 데이터란: 데이터를 위한 데이터 즉,
- 어노테이션 이란?
- [ 과정 ]
- 1) 기본 (built-in) 어노테이션의 종류 (유효성 검사)
- @Override
- 선언한 메서드가 오버라이드 되었다는것을 나타낸다.
- 만약 상위 부모 클래스에서 해당 메서드를 찾을 수 없다면 에러발생
- @Deprecated
- 해당 메서드가 더 이상 사용되지 않음을 표시, 사용할 경우 컴파일 에러발생
- @SuppressWarnings
- 선언한 곳의 컴파일 경고를 무시한다.
- @SafeVarags
- Java7부터 지원, 제네릭같은 가변인자의 매개변수를 사용할떄 경고무시.
- @FunctionalInterface
- Java8부터 지원, 함수형 인터페이스를 지원하는 어노테이션,
- 만약 메서드가 존재하지 않거나 1개이상의 메서드가 존재할 경우 컴파일 오류 발생
- 1) 기본 (built-in) 어노테이션의 종류 (유효성 검사)
- 2) 메타(meta) 어노테이션 종류 (정보의 정보 표시)
- @Retention
- RetentionPolicy(종류)
- SOURCE: 컴파일 전까지만 유효.
- CLASS: 컴파일러가 래스를 참조할때까지 유효
- RUNTIME: 컴파일 이후에도 JVM에 의해 계속 참조 가능(리플렉션 에서 사용)
- 자바 컴파일러가 어노테이션을 다루는 방법 기술하며, 특정시점까지 영향을 미치는지 결정한다.
- @Target
- ElemenType(종류)
- PACKAGE: 패키지선언
- TYPE: 타입선언
- ANNOTATION_TYPE: 어노테이션 타입 선언
- CONSTRUCTOR: 생성자 선언
- FIELD: 멤버 변수 선언
- LOCAL_VARIABLE: 지역 변수 선언
- METHOD: 메서드 선언
- PARAMETER: 전달인자 선언
- TYPE_PARAMETER: 전달인자 타입 언
- TYPE_USE: 타입 선언
- 어노테이션 적용 치를 선택
- @Documented
- Javadoc에 포함시킨다.
- @Retention
- *javadoc이란
- @Inherited
- 어노테이션의 상속을 가능하게 한다.
- @Repeatable
- Java8 부터 지원하며, 연속적(중복 정의)으로 어노테이션을 선언 할 수 있다.
- java소스에 문서화를 하는 방법으로 클래스나 메소드에 주석으로 기술한 내용을 javadoc 명령어나 또는 이를 이용한 (maven의 pharse등) 을 사용하여 문서화 하는것을 말한다.
- /**~ */ , 특별한 키워드는 @keyword으로 작성하면 된다. @author, {@link}, @deprecated, @see, @since 등등 이있음.
- ex) @Repeatable(value = Colors.class)
public @interface Color {}
public @interface Colors {} - public @interface InsertIntData {
int data() default 0;
}
- [ 결과 ]
- 어노테이션은 기본적으로 인터페이스 형태를 취하고 있으며, interface 앞에 @ 표시를 해주면 된다.
어노테이션의 필드에서는 enum, String이나 기본 자료형, 기본자료형의 배열을 사용할 수 있습니다. - 커스텀 (custome) 어노테이션도 가능하다.
- 어노테이션은 기본적으로 인터페이스 형태를 취하고 있으며, interface 앞에 @ 표시를 해주면 된다.
- [ 성과 ]
- 어노테이션은 본질적인 목적은 소스코드에 메타데이터를 표현하는 것이다.
- 단순 부가적인 표현 뿐만 아니라 리플렉션(reflection) 을 이용하면 어노테이션 지정만으로도 원하는 클래스를 주입할 수 있다.
'JAVA' 카테고리의 다른 글
GC(Garbage Collector)이란? (0) | 2020.08.07 |
---|---|
JVM 이란? (0) | 2020.08.07 |
Jit 컴파일러란? 최적화 튜닝에 대해서 (0) | 2020.08.07 |
객체지향 5원칙 SOLID 이란? (0) | 2020.07.09 |
리플렉션(reflection)이란? (0) | 2020.07.09 |