어노테이션 설정하기

어노테이션 설정하기

728x90

어노테이션의 구성

@Target과 @Retention은 꼭 필수로 입력되어야한다.

@Target 어노테이션의 부착대상을 지정한다. ({ElementType.CONSTRUCTOR : 생성자에 부착해도 된다.

ElementType.METHOD : 메소드에 부착해도 된다.

ElementType.PARAMETER : 매개변수 메소드에 부착해도 된다.

ElementType.FIELD : 클래스의 멤버변수에 부착해도 된다

ElementType.ANNOTATION_TYPE : 다른 어노테이션 타입에 부착해도 된다.

ElementType.TYPE : 클래스, 인터페이스에 부착해도 된다.

}) ({부착대상, 부착대상, 부착대상}) 배열의 형태로도 올 수 있다.

@Retention 어노테이션의 유지되는 시점을 정의한다. RetentionPolicy.RUNTIME 프로그램이 실행될 때 어노테이션이 실행된다. 거의 Runtime이다 RetentionPolicy.Source

소스레벨에서 어노테이션이 사용된다. 컴파일되고는 쓸모없어진다. 문법검사같이 이클립스와 통합개발환경에서 사용이 된다. ex)Override RetentionPolicy.Class 컴파일 된 클래스에서 어노테이션이 사용된다.

어노테이션은 @interface의 형태를 가지고 있다.

예시

@Target(ElementType.PARAMETER)

//메소드 파라미터에 부착하고, 프로그램 실행 시점까지 유지되는 어노테이션이다.

@Retention(RetentionPolicy.RUNTIME)

public @interface SessionUser{

//SessionUserAnnotationProcess.java를 개발해야한다.

//어노테이션의 정보를 활용해서 개발해야한다.

//@SesstionUser어노테이션을 감지하고 적절한 처리를 수행하는 클래스가 개발되어야한다.

}

@RequestMapper("/order.do")

public String order(@SessionUser User user, int productNo){

//그래야 이렇게 사용할 수 있다.

}

어노테이션의 사용방법

@Target({부착대상, 부착대상, 부착대상})

@Retention(보유시점) //1개밖에 못적는다.

public @interface 어노테이션명{ //Controller라고 적었다고 예시하고 아래부분 작성함

String value() default = "";

String[] path() default ={};

//값의 타입 , 속성명(bean에 저장될 때 어떻게 저장되는지 결정), 기본값

}

@Retention(보유시점) //1개밖에 못적는다. public @interface 어노테이션명{ //Controller라고 적었다고 예시하고 아래부분 작성함 //값의 타입 , 속성명(bean에 저장될 때 어떻게 저장되는지 결정), 기본값 } value는 생략, value를 적고 적어도 된다.

@Controller(value="homeController")

@Controller("homeController")

@Controller(value="homeController") @Controller("homeController") @RequestMapping

value = path로 적혀있어서 서로 작성해도 상관없다.

value = path로 적혀있어서 서로 작성해도 상관없다. 그래서 이런 속성값 적는것이 가능한 이유이다.

그래서 이런 속성값 적는것이 가능한 이유이다. 속성명이 하나밖에 없으면 속성명을 생략하고 적을 수 있다. @어노테이션(값)

속성명이 하나밖에 없어도 속성명과 함께 적을 수 있다. @어노테이션(속성명=값)

속성명이 하나밖에 없는 경우 무조건 속성명을 value로 정한다. (생략이 가능하기 때문)

속성값이 배열인 경우 값이 하나밖에 없으면 배열표시를 생략할 수 있다. @어노테이션(path=값)

기본값이 없으면 속성명을 꼭 적어줘야한다.

속성명이 value인 경우 그 속성명을 생략 할 수 있다. 속성명 없이 값만 적는 경우 그 값은 value의 속성의 값으로 간주된다.

속성명이 value인 경우 다른 속성명과 같이 사용될 때는 생략할 수 없다. @어노테이션(value="값", path="값")

속성값이 배열이고, 값이 2개이상인 경우 배열의 리터럴로 작성해야한다. @어노테이션(path={값, 값, 값})

어노테이션의 사용목적

부가적인 정보를 전달하기 위해서 사용한다. 부가적인 정보는 meta data라고 부른다. 어디에 전달할 까? IDE(이클립스, 인텔리제이 등의 개발툴) 과 프레임워크나 라이브러리에게 전달할 목적이다.

프로그램 실행에 필요한 특별한 작업을 수행하게 할 목적으로 사용된다. loombok 이라는 라이브러리가 존재한다. @Getter, @Setter Getter/Setter메소드를 스스로 만든다. @NoArgsConstructor 매개변수 없는 생성자 이렇게 어노테이션으로 특별한 작업을 수행하게 한다.

728x90

from http://lionpower.tistory.com/291 by ccl(A) rewrite - 2021-12-29 20:27:36