상세 컨텐츠

본문 제목

Java - 어노테이션 (Annotation)

개발/Java

by 뉴에이스 2018. 10. 12. 18:01

본문

어노테이션 (Annotation)
	- 클래스, 메서드, 변수 등에 추가적인 데이터(Meta Data)를 붙이는 방식
	- XML 설정 부분을 대체..
			->		@WebServlet(...)
			...
			...
		
		
			...
			...
		
	- 동적으로 클래스나 메서드에 필요한 메타 정보를 설정하고 이용한다. (리플렉션)
	- 어노테이션을 활용하는 대표적인 기술 / 프레임워크
		Spring(스프링)
		Struts2
		myBatis
		
	- 생성 규칙...
		1. interface 키워드와 함께 @로 시작하고 이름을 명시
			@interface Override {
				String value();
			}
		2. 메서드에 파라미터를 선언할 수 없다.
		3. 메서드에 throws를 선언할 수 없다.
		
	- Built - In Annotation
		: 사용자가 직접 어노테이션을 작성(정의)할때 활용되는 어노테이션(메타 어노테이션)
		1. @Target
			: 사용자가 정의하는 어노테이션이 어느위치에 적용 할 수 있는지
			: FIELD - 멤버변수에 사용
			: METHOD - 메서드
			: TYPE - 클래스, 인터페이스 선언에 사용
			: PARAMETER - 메서드의 파라미터(매개변수) 자리
			: CONSTRUCTOR - 생성자에 사용
			: LOCAL_VARIABLE - 메서드 내의 변수
		2. @Retention
			: 작성되는 어노테이션의 언제까지 사용되는지 설정
			: SOURCE - 소스상에서만 (코드 작성/편집시, ex>Override..)
			: CLASS - .class 파일에 정보 유지
			: RUNTIME - 실행될때 (실제 개발에 주로 사용됨..)
		@Target(ElementType.FIELD) -> MyAnno는 변수에만 사용할 수 있게 됨
		@Retention(RetentionPolicy.CLASS) -> .class파일을 만들때까지만 사용, 실행할때는 참조가 되지 않음
		@interface MyAnno {
			String value();
		}
		
	- 3가지 Annotation의 타입
		1. Marker (메서드의 선언만 되어 있는것)(ex. Override)
			public @interface MyAnno {}
		2. Single-Value  (안쪽에 정의된 메서드가 하나)
			public @interface MyAnno {
				String value();
			}
			@SuppressWarnings -> target({..,..,..,..,..}) 모든 위치에서 사용 가능,,
		3. Full-Value or Multi-Value (하나 이상의 메서드가 선언) 
			public @interface MyAnno {
				String value();
				String call();
			}

어노테이션 예시

//@MyAnno
//@Override -> @Target(ElementType.TYPE) 
public class Test01 {
	
	// @Override // 메서드가 아닌 일반 변수에 사용시 오류 발생 (사용 위치 에러), @Target(ElementType.FIELD) 
	int test;
	
	@Override // @Target(ElementType.METHOD)
	public String toString() { return "a"; }
	
	// @Override // @Target(ElementType.PARAMETER)
	public void call(/* @MyAnno */ int a) {
		
	}
	
	// @MyAnno, @Target(ElementType.CONSTRUCTOR) 
	Test01() {}
	
	public static void main(String[] args) {
		
	}
}

관련글 더보기

댓글 영역