일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- DispatcherServlet
- springwebmvc
- FunctionalInterfaces
- DesignPattern
- String
- Immutable
- 프록시
- ApplicationContext
- 메이븐
- IOC
- 빌드툴
- Spring
- 컴퓨터시스템
- Kotlin for Java Developers
- gradle
- JPA
- AutoConfiguration
- 링커
- ORM
- lambda
- 클린코드
- exception
- 토비의스프링
- hibernate
- 링킹
- beanfactory
- springboot
- 토비의스프링3.1
- 자바
- Today
- Total
엔지니어로 가는 길
JAVA SE 8 이후의 Annotations 본문
JAVA SE 8 이후의 Annotations
1. Type Annotations and Pluggable Type Systems
자바8 이전에는 어노테이션이 declarations에만 적용될 수 있었다. 하지만 자바8부터 어노테이션이 type use에도 적용될 수 있다. 다시 말해, 타입을 사용하는 곳이면 어디든 어노테이션을 사용될 수 있다는 뜻이다.
Class instance creation expression:
Type cast:
Implements clause:
Thrown exception declaration:
이러한 형태의 어노테이션을 타입 어노테이션이라 부른다. 타입 어노테이션은 analysis of java code를 향상시키고 더 강한 type checking을 보장할 수 있다.
특징
- ElementType에 TYPE_USE와 TYPE_PARAMETER가 추가되었다.
- 자바 8부터는 type checking framework를 제공하지 않으므로 사용하고 싶으면 따로 다운받아서 사용해야 한다. (다시 말해, 그냥 @NonNull을 사용한다고 적용되는 것이 아니라 별도의 설정을 해주거나 도구를 이용해야 타입 어노테이션의 효과가 적용된다는 뜻인 것 같다.)
- @NonNull @Readonly 같은 타입 어노테이션은 Checker Framework, FindBugs, Eclipse, NetBeans, IntelliJ와 같은 analyzers에 의해 사용될 수 있다. 이런 analyzers는 컴파일 타임에 IDE의 백그라운드 compilation이나 Maven 등을 통해 실행된다.
2. Repeatable Annotations
자바8부터 같은 어노테이션을 같은 곳에 두 번 이상 사용할 수 있다. Repetable 어노테이션으로 만드는 방법은 아래와 같다.
사용법
어노테이션에 @Repeatable 이라는 meta-annotation을 붙이고 value로 containing annotation type을 준다.
Authors.class가 containing annotation type이다. Containing annotation type은 반드시 배열 타입의 value element를 가져야 하는데, 배열의 타입은 repetable annotation type이어야 한다.
이제 아래와 같이 같은 곳에 어노테이션을 여러번 붙일 수 있다.
참고
https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html
'프로그래밍 > Java' 카테고리의 다른 글
자바 Type Inference (0) | 2020.09.23 |
---|---|
JAVA Error와 Checked/Unchecked Exception (0) | 2020.09.11 |
JAVA 어노테이션에 대해 알아보자 (0) | 2020.09.05 |
JAVA 디폴트 메소드 (0) | 2020.08.30 |
JAVA 메소드 참조(Method References) (0) | 2020.06.30 |