SlideShare a Scribd company logo
1 of 19
Annotation
이정훈
http://github.com/sjh836
1. 어노테이션이란
• @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여
한 것
• 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로
그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드
에 정보를 추가하는 정형화된 방법.
2. 어노테이션의 용도
1. @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위
한 용도
2. 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플
렉션을 이용해서 특수 기능을 추가하기 위한 용도
3. 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도
※ 자바 리플렉션: 다른언어에는 존재하지 않는 특별한 기능, 컴파일 시간이 아닌 실행시간에 동적으
로 특정 클래스의 정보를 객체를 통해 분석 및 추출해내는 프로그래밍 기법
3. 기본 어노테이션(JDK에서 제공)
• @Override: 해당 메소드가 부모 클래스에 있는 메소드를 재정
의했다는 것을 명시적으로 선언
• @Deprecated: 더이상 사용되지 않는 클래스나 메소드 앞에 추
가
• @SuppressWarnings: 프로그램에는 문제가 없는데 간혹 컴파일
러가 경고를 뿜을 때가 있는데, 이를 무시하라고 프로그래머에
게 알려줌
@Deprecated 예제
@Deprecated를 커스텀 어노테이션
(@Test)에 사용
@Test와 관련 엘리먼트에 전부 취소선
이 그어지고, 경고 발생
메소드위에 @Deprecated
를 사용하면 메소드에 취
소선이 그어진다.
@SuppressWarnings 예제
클래스의 타입을 확실하게 하기
위해 제네릭을 사용하라고 경고
이 경고를 무시하기위해 @SuppressWarnings 사용
※제네릭: 타입의 안정성, 개발자의 실수를 방지하기 위해 사용하는 기법으로 안써도 되지만, 경고가 발생된다.
* 인자의 종류
4. 메타 어노테이션
• 어노테이션을 선언할때 사용한다. 프로그래머가 어노테이션을
만들때 사용하는 것이다.
1. @Target
2. @Retention
3. @Documented: 해당 어노테이션 정보가 JavaDocs(API) 문서
에 포함
4. @Inherited: 모든 자식 클래스가 부모 클래스의 어노테이션을
사용할 수 있다는 것을 선언
5. @interface: 어노테이션 선언할 때 사용
4-1. @Target
• 어노테이션이 적용할 위치를 결정
import java.lang.annotation.Target;
• 적용 가능 대상(디폴트는 전 범위)
import java.lang.annotation.ElementType;
ElmentType.TYPE : 클래스, 인터페이스, 열거 타입
ElmentType.ANNOTATION_TYPE : 어노테이션 타입
ElmentType.FIELD : 필드
ElmentType.CONSTRUCTOR : 생성자
ElmentType.METHOD : 메서드
ElmentType.PARAMETER : 파라미터
ElmentType.LOCAL_VARIABLE : 로컬 변수
ElmentType.PACKAGE : 패키지
@Target 예제(main.java 소스)
@Target 예제(Test.java 소스)
@Target을 메소드로 설정했을 경우 @Target을 클래스,인터페이스로 설정했을 경우
Main.java에서 @Test를 메소드에 주었기 때문에 정상 작동 Main.java에서 @Test를 메소드에 주었기 때문에 에러 발생
4-2. @Retention
• 어떤 시점까지 어노테이션이 영향을 미치는지 결정
import java.lang.annotation.Retention;
• 적용 가능 시점
import java.lang.annotation.RetentionPolicy;
RetentionPolicy.SOURCE: 어노테이션 정보가 컴파일 시 사라짐
RetentionPolicy.CLASS: 클래스 파일에 있는 어노테이션정보가 컴파일
러에 의해 참조 가능, 가상머신에서는 사라짐(리플렉션 불가, 디폴트)
RetentionPolicy.RUNTIME: 실행 시 어노테이션 정보가 가상머신에 의
해서 참조 가능
@Retention 예제(main.java 소스)
@Retention 예제(source)
@Retention를 source로 설정했을 경우
실행결과 역시, @Test의 정보가 사라져있다.
Main.class에서 @Test정보가 사라져있다.
@Retention 예제(class)
@Retention를 class로 설정했을 경우
실행시간에는 @Test의 정보가 사라진다.
Main.class에서 @Test정보가 존재한다.
@Retention 예제(runtime)
@Retention를 runtime로 설정했을 경우
컴파일 이후, 실행시각까지 @Test의 정보가 유지된다.
Main.class에서 @Test정보가 존재한다.
@Documented 예제(사용X)
@Documented를 사용하지 않은 경우
JavaDoc에 @Test 어노테이션 정보가 남아있지 않는다.
※ JavaDoc란 자바 소스 코드에 대한 HTML 형식
의 API 문서이다.
@Documented 예제(사용O)
@Documented를 사용한 경우
JavaDoc에 @Test 어노테이션 정보가 있다.
5. 사용자어노테이션 선언법
public @interface 어노테이션이름
{
// 엘리먼트들
/*
String value();
String[] author();
int revision() default 0; //엘리먼트에 디폴트값 주는법
*/
}
어노테이션은 암묵적으로 어노테이션 인터페이스를 상속받으므로 상속받을수 없
다.
6. 어노테이션 사용
@어노테이션(엘리먼트=값, 엘리2="값")
public class 클래스
{}
@어노테이션2(값) //엘리먼트가 1개일 경우
Public class 클래스2
{}
메소드, 필드 등 어디에서나 사용할 수 있다.

More Related Content

What's hot

[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장Jong Pil Won
 
ModelSim 기초 매뉴얼
ModelSim 기초 매뉴얼ModelSim 기초 매뉴얼
ModelSim 기초 매뉴얼Jihyun Lee
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1Jinkyoung Kim
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2Jinkyoung Kim
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드SangIn Choung
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9Jinkyoung Kim
 

What's hot (9)

[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장
 
ModelSim 기초 매뉴얼
ModelSim 기초 매뉴얼ModelSim 기초 매뉴얼
ModelSim 기초 매뉴얼
 
17 swift 프로토콜
17 swift 프로토콜17 swift 프로토콜
17 swift 프로토콜
 
15 swift 클래스
15 swift 클래스15 swift 클래스
15 swift 클래스
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
 
Rest api 테스트 수행가이드
Rest api 테스트 수행가이드Rest api 테스트 수행가이드
Rest api 테스트 수행가이드
 
Python
PythonPython
Python
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
 

Viewers also liked

서블릿(servlet)
서블릿(servlet)서블릿(servlet)
서블릿(servlet)JungHoon Lee
 
아두이노 Digital/Analog IO
아두이노 Digital/Analog IO아두이노 Digital/Analog IO
아두이노 Digital/Analog IOJungHoon Lee
 
아두이노 bluetooth
아두이노 bluetooth아두이노 bluetooth
아두이노 bluetoothJungHoon Lee
 
JEJUPICK [2016 Oh My Jeju Hackathon]
JEJUPICK [2016 Oh My Jeju Hackathon]JEJUPICK [2016 Oh My Jeju Hackathon]
JEJUPICK [2016 Oh My Jeju Hackathon]Yurim Jin
 
모임 뒤에 사람있어요 - 9XD 1년 회고
모임 뒤에 사람있어요 - 9XD 1년 회고모임 뒤에 사람있어요 - 9XD 1년 회고
모임 뒤에 사람있어요 - 9XD 1년 회고Yurim Jin
 
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발Daniel Juyung Seo
 
신입 개발자 생활백서
신입 개발자 생활백서신입 개발자 생활백서
신입 개발자 생활백서Yurim Jin
 
What is language?
What is language?What is language?
What is language?Dave Gray
 
Load Test Like a Pro
Load Test Like a ProLoad Test Like a Pro
Load Test Like a ProRob Harrop
 
What is Language
What is LanguageWhat is Language
What is Languageamna-shahid
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]Yurim Jin
 

Viewers also liked (13)

sungmin slide
sungmin slidesungmin slide
sungmin slide
 
서블릿(servlet)
서블릿(servlet)서블릿(servlet)
서블릿(servlet)
 
아두이노 Digital/Analog IO
아두이노 Digital/Analog IO아두이노 Digital/Analog IO
아두이노 Digital/Analog IO
 
아두이노 bluetooth
아두이노 bluetooth아두이노 bluetooth
아두이노 bluetooth
 
Jeg har skabt
Jeg har skabtJeg har skabt
Jeg har skabt
 
JEJUPICK [2016 Oh My Jeju Hackathon]
JEJUPICK [2016 Oh My Jeju Hackathon]JEJUPICK [2016 Oh My Jeju Hackathon]
JEJUPICK [2016 Oh My Jeju Hackathon]
 
모임 뒤에 사람있어요 - 9XD 1년 회고
모임 뒤에 사람있어요 - 9XD 1년 회고모임 뒤에 사람있어요 - 9XD 1년 회고
모임 뒤에 사람있어요 - 9XD 1년 회고
 
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
[OSS 개발자 포럼] 오픈소스를 활용한 개발자 자기 개발
 
신입 개발자 생활백서
신입 개발자 생활백서신입 개발자 생활백서
신입 개발자 생활백서
 
What is language?
What is language?What is language?
What is language?
 
Load Test Like a Pro
Load Test Like a ProLoad Test Like a Pro
Load Test Like a Pro
 
What is Language
What is LanguageWhat is Language
What is Language
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 

Similar to Annotation

[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발NAVER D2
 
Spring MVC
Spring MVCSpring MVC
Spring MVCymtech
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성흥래 김
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
자바 8
자바 8자바 8
자바 8신 한
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 APINAVER Engineering
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...asfasf4
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)SangIn Choung
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework경주 전
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)동환 김
 

Similar to Annotation (20)

5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
Annotation
AnnotationAnnotation
Annotation
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
자바 8
자바 8자바 8
자바 8
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
Linq
LinqLinq
Linq
 
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)
 
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 API
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 기초
Java 기초Java 기초
Java 기초
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
回国去哪买毕业证办迪肯大学毕业证Deakin毕业证书【Q微202-661-4433】 Deakin售澳洲毕业证原版新毕业证书出售各国毕业证买澳洲毕业证的价...
 
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
[기본과정] 코드 테스트와 커버리지 기본 교육(개념)
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 
Architecture patterns with python (2)
Architecture patterns with python (2)Architecture patterns with python (2)
Architecture patterns with python (2)
 

More from JungHoon Lee

리스펙토링 6월 세미나, AWS로 개인서버 구축하기
리스펙토링 6월 세미나, AWS로 개인서버 구축하기리스펙토링 6월 세미나, AWS로 개인서버 구축하기
리스펙토링 6월 세미나, AWS로 개인서버 구축하기JungHoon Lee
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 githubJungHoon Lee
 
삼육대 개발동아리 리스펙토링 OT
삼육대 개발동아리 리스펙토링 OT삼육대 개발동아리 리스펙토링 OT
삼육대 개발동아리 리스펙토링 OTJungHoon Lee
 
Syu 오늘 점심은 뭐먹지? 개요
Syu 오늘 점심은 뭐먹지? 개요Syu 오늘 점심은 뭐먹지? 개요
Syu 오늘 점심은 뭐먹지? 개요JungHoon Lee
 
Syu 동행길 웹개발 개요
Syu 동행길 웹개발 개요Syu 동행길 웹개발 개요
Syu 동행길 웹개발 개요JungHoon Lee
 
와이어샤크 IP패킷의 checksum증명
와이어샤크 IP패킷의 checksum증명와이어샤크 IP패킷의 checksum증명
와이어샤크 IP패킷의 checksum증명JungHoon Lee
 

More from JungHoon Lee (7)

삼육봇 소개
삼육봇 소개삼육봇 소개
삼육봇 소개
 
리스펙토링 6월 세미나, AWS로 개인서버 구축하기
리스펙토링 6월 세미나, AWS로 개인서버 구축하기리스펙토링 6월 세미나, AWS로 개인서버 구축하기
리스펙토링 6월 세미나, AWS로 개인서버 구축하기
 
리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github리스펙토링 5월 세미나, git과 github
리스펙토링 5월 세미나, git과 github
 
삼육대 개발동아리 리스펙토링 OT
삼육대 개발동아리 리스펙토링 OT삼육대 개발동아리 리스펙토링 OT
삼육대 개발동아리 리스펙토링 OT
 
Syu 오늘 점심은 뭐먹지? 개요
Syu 오늘 점심은 뭐먹지? 개요Syu 오늘 점심은 뭐먹지? 개요
Syu 오늘 점심은 뭐먹지? 개요
 
Syu 동행길 웹개발 개요
Syu 동행길 웹개발 개요Syu 동행길 웹개발 개요
Syu 동행길 웹개발 개요
 
와이어샤크 IP패킷의 checksum증명
와이어샤크 IP패킷의 checksum증명와이어샤크 IP패킷의 checksum증명
와이어샤크 IP패킷의 checksum증명
 

Annotation

  • 2. 1. 어노테이션이란 • @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여 한 것 • 컴파일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로 그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드 에 정보를 추가하는 정형화된 방법.
  • 3. 2. 어노테이션의 용도 1. @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위 한 용도 2. 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플 렉션을 이용해서 특수 기능을 추가하기 위한 용도 3. 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도 ※ 자바 리플렉션: 다른언어에는 존재하지 않는 특별한 기능, 컴파일 시간이 아닌 실행시간에 동적으 로 특정 클래스의 정보를 객체를 통해 분석 및 추출해내는 프로그래밍 기법
  • 4. 3. 기본 어노테이션(JDK에서 제공) • @Override: 해당 메소드가 부모 클래스에 있는 메소드를 재정 의했다는 것을 명시적으로 선언 • @Deprecated: 더이상 사용되지 않는 클래스나 메소드 앞에 추 가 • @SuppressWarnings: 프로그램에는 문제가 없는데 간혹 컴파일 러가 경고를 뿜을 때가 있는데, 이를 무시하라고 프로그래머에 게 알려줌
  • 5. @Deprecated 예제 @Deprecated를 커스텀 어노테이션 (@Test)에 사용 @Test와 관련 엘리먼트에 전부 취소선 이 그어지고, 경고 발생 메소드위에 @Deprecated 를 사용하면 메소드에 취 소선이 그어진다.
  • 6. @SuppressWarnings 예제 클래스의 타입을 확실하게 하기 위해 제네릭을 사용하라고 경고 이 경고를 무시하기위해 @SuppressWarnings 사용 ※제네릭: 타입의 안정성, 개발자의 실수를 방지하기 위해 사용하는 기법으로 안써도 되지만, 경고가 발생된다. * 인자의 종류
  • 7. 4. 메타 어노테이션 • 어노테이션을 선언할때 사용한다. 프로그래머가 어노테이션을 만들때 사용하는 것이다. 1. @Target 2. @Retention 3. @Documented: 해당 어노테이션 정보가 JavaDocs(API) 문서 에 포함 4. @Inherited: 모든 자식 클래스가 부모 클래스의 어노테이션을 사용할 수 있다는 것을 선언 5. @interface: 어노테이션 선언할 때 사용
  • 8. 4-1. @Target • 어노테이션이 적용할 위치를 결정 import java.lang.annotation.Target; • 적용 가능 대상(디폴트는 전 범위) import java.lang.annotation.ElementType; ElmentType.TYPE : 클래스, 인터페이스, 열거 타입 ElmentType.ANNOTATION_TYPE : 어노테이션 타입 ElmentType.FIELD : 필드 ElmentType.CONSTRUCTOR : 생성자 ElmentType.METHOD : 메서드 ElmentType.PARAMETER : 파라미터 ElmentType.LOCAL_VARIABLE : 로컬 변수 ElmentType.PACKAGE : 패키지
  • 10. @Target 예제(Test.java 소스) @Target을 메소드로 설정했을 경우 @Target을 클래스,인터페이스로 설정했을 경우 Main.java에서 @Test를 메소드에 주었기 때문에 정상 작동 Main.java에서 @Test를 메소드에 주었기 때문에 에러 발생
  • 11. 4-2. @Retention • 어떤 시점까지 어노테이션이 영향을 미치는지 결정 import java.lang.annotation.Retention; • 적용 가능 시점 import java.lang.annotation.RetentionPolicy; RetentionPolicy.SOURCE: 어노테이션 정보가 컴파일 시 사라짐 RetentionPolicy.CLASS: 클래스 파일에 있는 어노테이션정보가 컴파일 러에 의해 참조 가능, 가상머신에서는 사라짐(리플렉션 불가, 디폴트) RetentionPolicy.RUNTIME: 실행 시 어노테이션 정보가 가상머신에 의 해서 참조 가능
  • 13. @Retention 예제(source) @Retention를 source로 설정했을 경우 실행결과 역시, @Test의 정보가 사라져있다. Main.class에서 @Test정보가 사라져있다.
  • 14. @Retention 예제(class) @Retention를 class로 설정했을 경우 실행시간에는 @Test의 정보가 사라진다. Main.class에서 @Test정보가 존재한다.
  • 15. @Retention 예제(runtime) @Retention를 runtime로 설정했을 경우 컴파일 이후, 실행시각까지 @Test의 정보가 유지된다. Main.class에서 @Test정보가 존재한다.
  • 16. @Documented 예제(사용X) @Documented를 사용하지 않은 경우 JavaDoc에 @Test 어노테이션 정보가 남아있지 않는다. ※ JavaDoc란 자바 소스 코드에 대한 HTML 형식 의 API 문서이다.
  • 17. @Documented 예제(사용O) @Documented를 사용한 경우 JavaDoc에 @Test 어노테이션 정보가 있다.
  • 18. 5. 사용자어노테이션 선언법 public @interface 어노테이션이름 { // 엘리먼트들 /* String value(); String[] author(); int revision() default 0; //엘리먼트에 디폴트값 주는법 */ } 어노테이션은 암묵적으로 어노테이션 인터페이스를 상속받으므로 상속받을수 없 다.
  • 19. 6. 어노테이션 사용 @어노테이션(엘리먼트=값, 엘리2="값") public class 클래스 {} @어노테이션2(값) //엘리먼트가 1개일 경우 Public class 클래스2 {} 메소드, 필드 등 어디에서나 사용할 수 있다.

Editor's Notes

  1. http://horajjan.blog.me/220621945466 http://secretroute.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%9D%98%E7%A5%9E-Vol1-Annotation http://jdm.kr/blog/216 http://zzznara2.tistory.com/181