자바에서 사용될 때의 어노테이션은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다.
즉, 프로그램에게 추가적인 정보를 제공해주는 meta data(데이터를 위한 데이터)라고 볼 수 있다.
@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface [어노테이션명]{
public 타입 elementName() [default 값]
...
}
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- SW개발툴이나 build 시 코드를 자동으로 생성할 수 있도록 정보를 제공
- 실행(run time) 시 특정 기능을 실행하도록 정보를 제공
| Lombok 관련 어노테이션 | Spring 관련 어노테이션 | 테스트 관련 어노테이션 |
|---|---|---|
| @Setter | @Autowired | @RunWith |
| @Data | @Component | @ContextConfiguration |
| @Log4j | @Test |
컴파일 시 흔하게 코드를 작성하는 기능들을 완성해주는 라이브러리
1. @Setter 어노테이션
: setter 메서드를 생성해 주는 역할
: 3가지 속성을 부여해 줄 수 있다.
| 속성명 | 의미 |
|---|---|
| value | 접근 제한 속성을 의미한다. 기본값은 lombok.AccessLevel.PUBLIC |
| onMethod | setter 메서드의 생성 시 메서드에 추가할 어노테이션을 지정 코드는 특이하게도 ''표기가 사용되는데 JDK 버전에 따라 차이가 있다. up to JDK7: @Setter(onMethod=@({@AnnotationsFoHere})) from JDK8: @Setter(onMethod_={@AnnotationsGohere}) //note the underscroe after onMethod. |
| onParam | setter 메서드의 파라미터에 어노테이션을 사용하는 경우에 적용 |
2. @Data
: Lombok에서 가장 자주 사용되는 어노테이션
@ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor를 모두 결합한 형태로 한 번에 자주 사용되는 모든 메서드들을 생성할 수 있다는 장점이 있다.
만일 세부적인 설정이 필요없는 경우라면 @Data 를 주로 이용
3. @Log4j
: 로그 객체를 생성
@Log4j는 Log4j 설정을 이용하고, Log4j가 존재하지 않을 경우에는 @Log를 이용할 수 있다.
1. @Component
해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시하는 어노테이션
2. @Autowired
스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 표시
스프링은 @Autowired 어노테이션을 보고 스프링 내부에 관리되는 객체들 중에 적당한 것이 있는지를 확인하고 자동으로 주입해준다.
->필요한 객체가 존재하지 않는 다면 에러 발생!
테스트 관련해서 가장 중요한 어노테이션 @ContextConfiguration
-> spring이 실행되면서 어떤 설정 정보를 읽어 들여야 하는지를 명시
속성으로는 locations를 이용해서 문자열의 배열로 XML 설정 파일을 명시할 수도 있고, classes 속성으로 @Configuration이 적용된 클래스를 지정해 줄 수도 있다.
@Runwith는 테스트 시 필요한 클래스를 지정
스프링은 SpringJUnit4ClassRunner 클래스가 대상이 된다.
@Test는 junit에서 해당 메서드가 jUnit상에서 단위 테스트의 대상인지 알려준다.