1. 어노테이션
○ 쉽게 메타데이터
- 메타데이터: 처리데이터가 아님
곧, 컴파일 실행과정에서 코드를 어떻게 컴파일 하고 처리할 것인지 알려주는 정보
○ 형태
- @AnnotationName
○ 용도
- (컴파일러) 컴파일러야 문법 에러 체크해라
- (빌드, 배치)개발자: 나는 한줄만 적을게. 빌드나 배치돌때 코드를 자동 생성해줘라
- (실행, 런타임) 내가 특정한 기능을 같이 실행해라
2. 대표적인 예시
○ @Override
1) 메소드가 오버라이드 됐다 컴파일러야. 한번 문법 오류 점검해봐
2) 컴파일러: 오류발생했다.
3) 빌더: XML 설정파일 생성해줄게
4) 배포: JAR 압축파일 생성해줄게
5) 실행: 클래스 역할 정의해줄게
3. 타입 정의와 적용
○ @interface
- 정의: public @interface AnnotationName{}
- 사용: @AnnotationName
- 정의 시 엘리먼트 멤버 포함가능
public @interface AnnotationName{
타입 elementName() [디폴트값]; ==> 엘리먼트 선언부
}
· 타입: 기본형+참조형 anything
· 이름 뒤 메소드 같은 괄호 필요(String elementName();, int eN2 default 5;
- 엘리먼트 멤버 사용 방법
· @AnnotationName(elementName1="값", eN2=3);
· @AnnotationName(elementName1="값");
· 디폴트값이 없는 경우 사용 시 반드시 값을 명시적으로 초기화 해야한다.
- 기본 엘리먼트 value
public @interface AnnotationName{
String value();
}
· value는 사용 시 값만 명시 가능하다.
@AnnotationName("퇴근");
· 기본 value와 다른 엘리먼트 동시 초기화 시 엘리먼트 멤버 사용방법 참고
4. 적용대상
○ java.lang.annotation.ElementType 참고
- https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html
○ @target
- 어노테이션 적용 대상 지정
- 기본 엘리먼트인 value는 ElementType 배열을 를 가진다.(어노테이션 적용대상을 복수개로 지정)
- https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html
○ 어노테이션은 클래스, 필드, 메소드만 적용가능
public class Monitor{
// 이런거(생성자) 불가
// @AnnotationName
public Monitor();
// 이런거 가능
@AnnotationName
private String bright;
@AnnotationName\
public void turnOn(){ ... }
}
5. 유지정책
○ java.lang.annotation.RetentionPolicy 열거상수 참고
- https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html
- https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html
○ 리플렉션(reflection)
- 런타임 시 클래스의 메타 정보 얻는 기술
- @Retention
- @Retention(RetentionPolicy.RUNTIME): retained by the VM at run time, so they may be read reflectively.
- @Retention(RetentionPolicy.SOURCE): discarded by the compile
- @Retention(RetentionPolicy.CLASS): but need not be retained by the VM at run time
6. 런타임 시 어노테이션정보 사용하기 ○ class Annotation: java.lang.Class
○ Filed, Constructor, Method: Class--> java.lang.reflect의 패키지 사용
- Field 클래스: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html
- Method 클래스: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html
- Constructor클래스: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html
2018년 4월 12일 목요일
피드 구독하기:
댓글 (Atom)
[Android Studio] Installation and Make a Layer for Mac OS(High Sierra)
1. download android studio https://developer.android.com/studio/#downloads 2. Make a Shared Resource(String in this case) 3...
-
"Unicode Character 'NULL' (U+0000)" https://www.fileformat.info/info/unicode/char/0000/index.htm "Why Char Uses 2 ...
-
1. Connect Arduino web-site https://www.arduino.cc/en/Main/Software 2. Download the IDE for Mac 3. Completion
-
1. 인터페이스의 필요성 □ 인터페이스의 역할 1. 개발 코드를 수정하지 않고 사용객체 변경 2. 객체 선택에 따른 실행내용, 리턴값 다양화(다형성) □ 인터페이스로 구현된 API Comparable ...
댓글 없음:
댓글 쓰기