[스터디할래] whitesheep #12 어노테이션
애노테이션의 정의
자바의 정석에 따르면 아래와 같은 정의를 따른다
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공
애노테이션은 본래 주석에서 유래한 것이라고 한다..
그러나 나는 저 정의에 대해 의구심을 품은다 왜냐하면 @Autowired
나 @Setter
처럼 실행 시점에
실제로 값을 주입하기에 소스 코드 작성시에는 영향이 없지만 실행시점에는 영향이 있기 때문이다
메타 애너테이션
- 애너테이션을 만드는데 사용하는 애너테이션
애너테이션 | 설명 |
---|---|
@Target | 애너테이션을 지정할 대상의 종류를 지정 |
@Retention | 애너테이션이 유지되는 범위 |
@Documentated | 애너테이션 정보가 javadoc으로 작성된 범위에 포함되도록 설정 |
@Inherited | 애너테이션이 자손 클래스에 상속되도록 지정 |
@Repeatable | 애너테이션을 반복해서 적용할 수 있게 정의 (since 1.8~) |
@Target
- TYPE : 클래스
- FILED, METHOD 등…
@Retention
- SOURCE
- 컴파일 후 .class 생성시 애너테이션 정보는 사라진다
- 예를들어
@Override
같은 메서드는 코드를 작성할 때만 필요
- 예를들어
- 컴파일 후 .class 생성시 애너테이션 정보는 사라진다
- CLASS
- 기본값이지만 거의 사용하지 않음
- RUNTIME
- 리플렉션을 사용해서 어떤 처리를 할 것이라면 이것을 사용해야 한다
- SOURCE
value
애너테이션 내 value 속성은 생략이 가능하다 !
서비스 로더
서비스 로더를 통해서 애너테이션의 처리부를 구현할 수 있다