BLOG main image
분류 전체보기 (313)
교육 (13)
NEIS (6)
Edufine (0)
Programmer (5)
Android Programming (1)
Internet W3 (18)
JAVA Programming (9)
JSP/Servlet (1)
Framework (7)
Spring For Beginner (4)
eGovFrame (10)
MEAN Stack (2)
NodeJS (5)
SublimeText (30)
SublimeText_Tips (18)
Eclipse (16)
JavaScript (8)
jQuery (12)
jQuery_tips (1)
Ajax (3)
DWR(Direct Web Remote) (4)
JSON(JS Object Notation) (4)
Oracle (2)
MySQL (28)
OS (16)
Download (3)
Life (10)
Favorit Site (1)
Books (2)
Healthy (1)
Stocks (1)
HTML5/CSS (1)
Python (4)
Security (7)
CISSP (0)
Ruby On Rails (5)
일기장 (0)
영어 교과서(중2) (3)
알고리즘 (0)
Go Lang (3)
VB 2010 (12)
C# (1)
정보보안기사(네트워크보안) (0)
업무 활용 엑셀 (11)
틈틈이 활용팁 (14)
하루 하루 살아가며 ……. (2)
기술 (1)
파이썬 & 데이터분석 (1)
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2015. 4. 23. 16:02

어노테이션(Annotation) - java 1.5 이후

 

정의 : 프로그램에게 추가적인 정보를 제공해주는 메타데이터(metadata) 이다.

 

용도

- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공

  ex) @Override : 메소드가 재정의 되었는지 확인할 수 있다.

- SW 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공

  ex) XML 설정 파일을 자동 생성하거나 배포를 위한 JAR 압축 파일을 자동 생성할 수 있다.

- 실행시(Runtime) 특정 기능을 실행하도록 정보를 제공

  ex) 객체가 애플리케이션 내부에서 해야할 역할을 정의할 수 있다. Servlet, Controller ...

 

어노테이션 타입 정의

- 소스파일 생성 : AnnotationName.java

- 소스 파일 내용

public @interface AnnotationName { }

 

어노테이션 타입 적용

@AnnotationName

 

어노테이션 엘리먼트(element) 멤버

- 어노테이션을 코드에 적용할 때 외부의 값을 입력받을 수 있도록 하는 역할

- 엘리먼트 선언

public @interface AnnotationName {

   타입 elementName() [ default 값 ];

   ......

}

 

※ 엘리먼트의 타입은 기본타입과 참조타입을 모두 사용할 수 있다.

public @interface AnnotationName {

  String elementName1();

  int elementName2() default 5;

}

 

- 어노테이션 적용시 엘리먼트 값을 지정하는 방법

@AnnotationName(elementName1 = "값", elementName2 = 3); 또는

@AnnotationName(elementName1 = "값");

 

기본 엘리먼트 value

public @interface AnnotationName {

  String value();  // 기본 엘리먼트 선언

  int elementName() default 5;

}

 

* 어노테이션을 적용할 때 엘리먼트명을 생략가능

@AnnotationName("값")

@WebServlet("/main")

public class MainServlet { ... }

 

* 두개 이상의 속성을 기술할 때에는 value=값 형태로 기술

@AnnotationName(value="값", elementName=3);

@WebServlet(value="/main")

public class MainServlet { ... }

 

어노테이션 적용 대상

- 코드 상에서 어노테이션을 적용할 수 있는 대상

- java.lang.annotation.ElementType 열거 상수로 정의되어 있음

ElementType 열거 상수

적용 대상 

 TYPE

클래스, 인터페이스, 열거 타입 

 ANNOTATION_TYPE

 어노테이션

 FIELD

 필드

 CONSTRUCTOR

 생성자

 METHOD

 메소드

 LOCAL_VARIABLE

 로컬 변수

 PACKAGE

 패키지

 

- 어노테이션 적용 대상 지정 방법

* @Target 어노테이션으로 적용 대상 지정

* @Target 의 기본 일리먼트인 value의 타입은 ElementType 배열

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})

public @interface AnnotationName {

}

 

소스 예제

@AnnotationName

public class ClassName {

  @AnnotationName

  private String fieldName;

 

  //@AnnotationName (X)

  public ClassName() {}

 

  @AnnotationName

  public void methodName() {}

}

 

어노테이션 유지 정책

- 어노테이션 적용 코드가 유지되는 시점을 지정하는 것

- java.lang.annotation.RetentionPolicy 열거 상수로 정의되어 있음

 

 RetentioinPolicy 열거 상수

 설명

 SOURCE

소스(.java)상에서만 어노테이션 정보를 유지한다.

소스 코드(.java)를 분석할 때만 의미가 있으며,

바이트 코드 파일(.class)에는 정보가 남지 않는다.

 CLASS

바이트 코드 파일(.class)까지 어노테이션 정보를 유지한다.

하지만, *리플렉션을 이용해서 이노테이션 정보를 얻을 수 없다.

 RUNTIME

바이트 코드 파일까지 어노테이션 정보를 유지하면서

리플렉션을 이용해서 런타임에 어노테이션 정보를 얻을 수 있다.

 

* 리플렉션 : 런타임에 클래스의 메타 정보를 얻는 기능

  - 클래스가 가지고 있는 필드, 생성자, 메소드, 어노테이션의 정보를 얻을 수 있다.

  - 런타임시에 어노테이션 정보를 얻으려면 유지 정책을 RUNTIME 으로 설정해야 함.

 

- 유지 정책 지정 방법

   @Retention 어노테이션으로 유지 정책을 지정

   @Retention의 기본 엘리먼트인 value의 타입은 RetentionPolicy

 

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)

public @interface AnnotationName {    }

 

 

 

 

 

 

 

 

 

반응형

'JAVA Programming' 카테고리의 다른 글

protected 접근 제한자  (0) 2015.04.27
어노테이션(Annotation) #2  (0) 2015.04.23
Getter와 Setter  (0) 2015.04.23
패키지와 접근 제한자  (0) 2015.04.23
non-static 멤버와 static 멤버의 특징  (0) 2015.04.23