티스토리 뷰
반응형
Java에서 어노테이션이란,
Java에서 어노테이션은 JEE5부터 새롭게 추가된 요소이다.
어노테이션을 사용하는 이유는, 유효성 검사를 쉽게 할 수 있고 코드가 깔끔해진다. 하지만, 가장 큰 특징은 메타 데이터로 볼 수 있다.
- 메타 데이터 : 데이터를 위한 데이터로서, 데이터 대해서 설명을 한 데이터이다.
Java에서 제공하는 어노테이션 종류
@Override
- 선언한 메소드가 오버라이드(재정의) 되었다는 것을 나타낸다.
@Deprecated
- 해당 메소드 혹은 객체가 더 이상 사용되지 않음을 표시한 것이다.
- 만약 해당 메소드 혹은 객체를 사용할 경우 컴파일 경고를 발생시킨다.
@SuppressWarnings
- 선언한 곳의 컴파일 경고를 무시하도록 한다.
@SafeVerargs
- Java7 부터 지원하며, 제네릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시한다.
@FunctionalInterface
- Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션이다.
- 만약 메소드가 존재하지 않거나, 1개 이상의 메소드(default 메소드 제외)가 존재할 경우 컴파일 오류를 발생시킨다
커스텀 어노테이션
개발자가 직접 작성한 어노테이션으로서, 커스텀 어노테이션을 만들때는 메타 어노테이션을 이용한다.
메타 어노테이션의 종류
@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 부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 해준다.
커스텀 어노테이션을 만들어보자
정수 값 주입 예제
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertIntData {
int data() default 0;
}
해당 어노테이션은 필드 값에 적용하는 것이고, 런타임까지 계속 유효한 값이 된다.
public class AnnotationExam01 {
//어노테이션에서 정의한 data 값을 30으로 초기화
@InsertIntData(data = 30)
private int myAge;
//어노테이션에서 정의한 default 값으로 초기화
@InsertIntData
private int defaultAge;
public AnnotationExam01() {
this.myAge = -1;
this.defaultAge = -1;
}
}
문자열 값 주입 예제
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertStringData {
String data() default "default";
}
public class AnnotationExam02 {
@InsertStringData(data = "MHLab")
private String myData;
@InsertStringData
private String defaultData;
public AnnotationExam02() {
myData = "No data";
defaultData = "No data";
}
}
어노테이션에 대해 더 살펴보자
https://it-mesung.tistory.com/72?category=828318
반응형
'Java > Java 기초' 카테고리의 다른 글
[Java 기초] Immutable (0) | 2020.02.15 |
---|---|
[Java 기초] Exception (0) | 2020.02.05 |
[Java 기초] 박싱과 언박싱 (0) | 2020.02.03 |
[Java 기초] GC에 대해서 (0) | 2020.01.24 |
[Java 기초] JVM 구조 (0) | 2020.01.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 빌더 패턴
- junit
- 복사 팩토리
- 김영한
- package-private
- 스프링부트
- ifPresent
- jdk버전
- 연관관계
- 빈 순환 참조
- try catch finally
- Spring
- 인프런
- try with resources
- 생성자
- flatMap
- 자바8
- 이펙티브자바
- 이펙티브 자바
- 팩토리 메소드 패턴
- effectivejava
- java8
- 정적팩터리메서드
- java
- springboot
- @Lazy
- 점층적 생성 패턴
- Effective Java
- mustache
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함