날아라쩡글이 2021. 12. 29. 20:25
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에 저장될 때 어떻게 저장되는지 결정), 기본값
    }
  • value는 생략, value를 적고 적어도 된다. 
    @Controller(value="homeController")
    @Controller("homeController")
  • @RequestMapping
  • value = path로 적혀있어서 서로 작성해도 상관없다. 
  • 그래서 이런 속성값 적는것이 가능한 이유이다.
  • 속성명이 하나밖에 없으면 속성명을 생략하고 적을 수 있다. @어노테이션(값)
  • 속성명이 하나밖에 없어도 속성명과 함께 적을 수 있다. @어노테이션(속성명=값) 
  • 속성명이 하나밖에 없는 경우 무조건 속성명을 value로 정한다. (생략이 가능하기 때문)
  • 속성값이 배열인 경우 값이 하나밖에 없으면 배열표시를 생략할 수 있다. @어노테이션(path=값)
    • 기본값이 없으면 속성명을 꼭 적어줘야한다. 
  • 속성명이 value인 경우 그 속성명을 생략 할 수 있다. 
    • 속성명 없이 값만 적는 경우 그 값은 value의 속성의 값으로 간주된다. 
  • 속성명이 value인 경우 다른 속성명과 같이 사용될 때는 생략할 수 없다. 
    • @어노테이션(value="값", path="값")
  • 속성값이 배열이고, 값이 2개이상인 경우 배열의 리터럴로 작성해야한다. 
    • @어노테이션(path={값, 값, 값})

어노테이션의 사용목적

  • 부가적인 정보를 전달하기 위해서 사용한다. 
    • 부가적인 정보는 meta data라고 부른다. 
    • 어디에 전달할 까? 
      • IDE(이클립스, 인텔리제이 등의 개발툴) 과 프레임워크나 라이브러리에게 전달할 목적이다. 
  • 프로그램 실행에 필요한 특별한 작업을 수행하게 할 목적으로 사용된다. 
    • loombok 이라는 라이브러리가 존재한다. 
    • @Getter, @Setter
      • Getter/Setter메소드를 스스로 만든다. 
    • @NoArgsConstructor
      • 매개변수 없는 생성자 
    • 이렇게 어노테이션으로 특별한 작업을 수행하게 한다. 
반응형