본문 바로가기
스터디/2209_자바의정석

12주차 과제 : 애너테이션

by Jeong.dev 2022. 10. 25.

📌 애너테이션이란

애너테이션

- 문서 설정하는 XML파일을 코드 파일 안에 애너테이션으로 넣어서 구현해서 관리를 용이하게 함

 

 

애너테이션 타입 정의 방법

@interface 애너테이션이름 {
	타입 요소이름(); // 애너테이션의 요소 선언
}

@interface TestInfo {
	int count() decault 1;
    String[] testTools();
}

@TestInfo(count=1, testTools={"aaa", "bbb"})
class NewClass{}

- @ 안붙이면 인터페이스로 선언됨

- 애너테이션의 메서드는 추상메서드이며, 애너테이션 적용 시 요소의 값 모두 지정해야 함(순서 상관 없음)

 

 

애너테이션 요소의 기본값

- 적용시 값 지정하지 않으면 사용할 기본값 지정 가능(null 제외)

- 요소의 이름 value인 경우 생략 가능

ex) @TestInfo(value=1) = @TestInfo(1)

- 요소의 타입이 배열인 경우, 괄호{} 사용해야 함

ex) 값이 없을 경우 @TestInfo(count=1, testTools={}) 이렇게 빈 괄호 작성해야 함

 

 

애너테이션 요소의 규칙

- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용됨

- 괄호()안에 매개변수 선언 불가

- 예외 선언 불가

- 요소를 타입 매개변수로(<T>) 정의 불가

 

 

마커 애너테이션

- 요소가 하나도 정의되지 않은 애너테이션

ex) @Test, @Deprecated

 

 

 

📌 표준 애너테이션

- 자바에서 제공하는 애너테이션

@FunctionalInterface : 함수형 인터페이스에 붙여 컴파일러가 추상 메서드 1개인지 체크

@SuppressWarnings : 컴파일러의 경고메시지가 나타나지 않게 억제 함

     => 이 경고는 내가 확인했음을 말해주는 의미로 사용함

 

 

메타 애너테이션

- 애너테이션을 위한 애너테이션

- 애너테이션을 정의할 때, 적용대상이나 유지기간의 지정에 사용

 

@Target : 애너테이션을 적용할 수 있는 대상 지정에 사용

 

@Retention : 애너테이션이 유지되는 기간을 지정하는데 사용

- 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE

ex) @Override : 실행할때는 필요 없고 컴파일때만 사용하면 되기 때문

- 실행시에 사용 가능한 애너테이션의 유지 정책은 RUNTIME

 

@Documented : javadoc으로 작성한 문서에 포함시키기 위해 사용

 

 

 

📌 애너테이션 프로세서

- 어노테이션을 프로세싱 하는 기술

- 소스코드 레벨에서 소스코드에 붙어있는 애너테이션 정보를 읽어와 컴파일러가 컴파일 중에

새로운 소스코드를 생성하거나 기존의 코드를 변경하게하는 것

ex) 롬복(@Getter, @Setter)

 

애너테이션 프로세서 장단점

- 장점 : 컴파일 시점에 조작하기 때문에 런타임 비용 제로

- 단점 : 기존의 코드를 고치는 방법은 현재로써는 public 한 API 가 없음

 

 

 

[참고]

- 자바의정석

- https://parkadd.tistory.com/54

'스터디 > 2209_자바의정석' 카테고리의 다른 글

13주차 과제 : I/O  (0) 2022.11.04
11주차 과제 : Enum  (0) 2022.10.18
10주차 과제 : 멀티쓰레드 프로그래밍  (0) 2022.10.18
8주차 과제 : 인터페이스  (0) 2022.10.11
7주차 과제 : 패키지  (0) 2022.10.06

댓글