티스토리 뷰

JAVA

(JAVA) 자바 어노테이션 Annotation

가독성 0% 2017. 2. 7. 18:22
반응형

어노테이션이란?

메타데이터와 같이 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다.

어노테이션의 용도는 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공

소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공

실행 시 특정 기능을 실행하도록 정보를 제공하는 용도로 쓴다.


public class asvsaf {
	public static void main(String[] args) {
/*
 * 어노테이션 정보 사용
 * getFields() : 필드 정보를 배열로 리턴
 * getConstructors() : 생성자 정보를 배열로 리턴
 * getDeclaredMethods() : 메소드 정보를 배열로 리턴
 */
		Method[] sMethods = Aa.class.getDeclaredMethods();
		
		for(Method ssmethod : sMethods){
/*
 * isAnnotationPresent(AnnotationClass)
 * 	어노테이션 적용되었는지 여부 상위 클래스에 적용된 경우에도 true를 리턴
 * getAnnotation(AnnotationClass)
 * 	어노테이션 적용되어 있으면 어노테이션 리턴 그렇지 않으면 null을 리턴
 * getAnnotations()
 * 	적용된 모든 어노테이션을 리턴 적용된 어노테이션이 없을경우 0인 배열을 리턴
 * getDeclaredAnnotations()
 * 	직접 적용된 모든 어노테이션을 리턴 상위 클래스에 적용된 어노테이션은 포함하지 않음
 */
			if(ssmethod.isAnnotationPresent(AnnotationName.class)){
				AnnotationName sAnnotationName = ssmethod.getAnnotation(AnnotationName.class);
				
				System.out.println(ssmethod.getName());
				System.out.println(sAnnotationName.str());
				
			}
		}
	}
	
/*
 * 어노테이션 적용대상
 * 적용 방법 : @Target({ElementType.적용대상})
 	
 * ElementType : 적용대상
 * TYPE : 클래스, 인터페이스, 열거 타입, 
 * ANNOTATION_TYPE : 어노테이션
 * FIELD : 필드 
 * CONSTRUCTOR : 생성자
 * METHOD : 메소드
 * LOCAL_VARIABLE : 로컬변수
 * PACKAGE : 패키지
 */
	@Target({ElementType.METHOD})
	
/*
 * 어노테이션 유지 범위
 * 적용방법 : @Retention(RetentionPolicy.SOURCE)
	
 * SOURCE :
 * 	소스상에서만 어노테이션 정보를 유지 소스 코드를 분석할 때만 의미가 있으며,
 *	바이트코드 파일에는 정보가 남지 않는다.
 * CLSS :
 *	바이트 코드 파일까지 정보를 유지 리플렉션을 이용해서 어노테이션 정보를 얻을 수 없다.
 * RUNTIME :
 *  바이트 코드 파일까지 정보를 유지 리플렉션을 이용해서 런타임 시에 어노테이션 정보를 얻을 수 있다.
*/
	@Retention(RetentionPolicy.RUNTIME)
	public @interface AnnotationName {
		String str() default "안녕하세요.";
	}
	
	public class Aa{
		@AnnotationName
		public void method1(){
			System.out.println("메소드1 실행");
		}
		
		@AnnotationName(str="잘가세요.")
		public void method2(){
			System.out.println("메소드2 실행");
		}
	}
}


실행결과

method1

안녕하세요.

method2

잘가세요.



반응형
댓글
최근에 올라온 글
최근에 달린 댓글