sol 개발 블로그 로고
Published on

Spring 어노테이션 정리

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. JDK 1.5 버전 이상에서 사용 가능하다. Java Annotation은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신(JVM)에 포함되어 작용한다. 이번 포스팅에는 Spring Boot 애플리케이션을 작성할 때 쓰이는 Annotation을 정리했다.

lombok

  • @EqualsAndHashCode

객체 속성이 몇가지 없으면 두 객체를 비교하기 쉽다. 하지만, 많고 복잡할 경우 객체 속성의 을 1대1로 비교하기는 어렵다. 그래서 객체의 값을 바탕으로 HashCode를 생성하고 이 HashCode를 바탕으로 두 객체가 동일한지 판단하는 Equal 메서드를 생성한다. 실제로는 equals(Object other)hashCode() 메서드를 생성한다.

  • @NoArgumentConstruct

아무런 인자 없이 객체를 생성하는 생성자를 만들어준다. Jackson 라이브러리의 ObjectMapper@RestController(json)에서 @ResponseBody의 바인딩 수행 ObjectMapper는 DTO 객체를 기본 생성자로 생성하기 때문에 생성을 위임한 경우가 아니라면 @NoArgumentConstruct가 DTO에 꼭 필요하다. 그리고 ObjectMapperSetterGetter로 DTO의 필드를 가져온다. Setter가 꼭 필요한 경우가 아니면 Getter를 통해서 전달해야한다.

  • @AllArgumentConstruct

모든 필드 값을 인자로하는 생성자를 만들어준다. 객체를 생성할 때 모든 의존성을 추가하는 Constructor based Injection에 사용된다.

  • @RequiredArgsConstructor

final, @NonNull 정의된 모든 필드를 인자로하는 생성자를 만든다. 객체를 생성할 때 null checked된 값을 입력하려면 NullPointerException이 발생한다. @NonNull처럼 입력하지 않은 필드는 null로 유지되고 추후에 넣어줄 수 있다.

  • @sl4j

System.out.printlin() 대신에 로그를 찍을 때 사용. info, waring, error 같이 로그의 위험도를 결정할 수 있고, 시간 같이 추가적인 정보를 출력하기 떼문에 유용하다.

Spring

  • @Component

개발자가 생성한 Class를 Bean으로 등록할 때 사용하는 Annotation.

  • @Bean

개발자가 제어 불가능한 외부 라이브러리나 설정 파일 같은 것들을 Bean으로 만들 때 사용

  • @Controller

Spring에게 Class가 Controller 역할을 한다고 명시하기 위해 사용하는 Annotation

  • @RequestMapping(value="/user", method=RequestMethod.GET)

요청 들어온 URI와 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다.

  • @RequestParam

요청 URI에 쿼리 스트링에 값을 받을 때 사용한다.

  • @RequestBody

Http 요청에 Body에 들어있는 값을 DTO에 맵핑 시키는 Annotation.

  • @ResponseBody

리턴되는 값이 view로 출력되지 않고 HTTP ResponseBody에 직접 쓰여지게 된다. return시 json, xml과 같은 데이터를 return한다.

  • @Autowired

Spring Contrainer에 있는 Bean을 의존성 주입할 때 사용하는 Annotation. 하지만 보통 의존성 주입할때는 @RequiredArgsConstructor로 의존성을 주입 받는다.