항해99 24일차 TIL [Annotation]

Colleen·2023년 2월 7일
0
post-thumbnail

Annotation

오늘은 Spring을 배우면서 어려웠던 annotation에 대해서 이야기 해보고자 한다.
하면서 알게 되었거나, 찾아 본 정보들을 위주로 쓴다. 당연히 여기 쓰여 있는 것보다 방대하게 더 많겠지만 이거라도 정리하면서 조금이나마 나아지는 나를 기대해 본다.

Annotation이란?

spring을 처음 배울때 @(글자)~~ 이런 친구가 구조도 잘 모르겠는 Service나 Repository,Controller등에 있는 것을 보고 멘붕이 왔던 기억이 있다. 간단하게 이야기 하지면 사전적인 의미로는 주석이라는 뜻이며, 자바스프링안에서는 코드 사이에 주석처럼 쓰이며, 특별한 기능 또는 의미를 수행하도록 한다고 한다.

Annotation의 용도

  • compiler에게 코드 작성 문법 에러를 체크하고 정보 제공을 한다.
  • 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 제공한다.
  • 실행시 (런타임시) 특정 기능을 실행하도록 정보를 제공한다.

Annotation 사용 순서(?)

  • Annotation을 정의 한다.
  • Class에 Annotation을 배치한다.
  • 코드가 실행 되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시한다.
    ** Reflection에 대해서는 나중에 알아 보고자 한다.

Annotation의 종류

@Component

@Component는 개발자가 직접 작성한 class를 bean으로 등록하기 위한 Annotation이다. Component에 대한 추가적인 정보가 없다면 class의 이름을 camelCase로 변경한것이 Bean id로 사용된다. 하지만 @Bean과 다르게 Component는 name이 아닌 value를 이용해서 Bean의 이름을 정한다.

@Bean

@Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들려할 때 사용되는 Annotation이다.
ArrayList같은 라이브러리등을 Bean으로 등록하기 위해서는 별도로 해당 라이브러리 객체를 반환하는 Method를 만들고 @Bean Annotation을 사용하면 된다. 위에서 말한거와 같이 Bean은 name으로 id를 지정하면 된다.

Autowired

속성(field), setter method, constructor(생성자)에서 사용하며 Type에 따라 알아서 Bean을 주입 해준다.
무조건적인 객체에 대한 의존성을 주입시킨다.
이 Annotation을 사용할 시, 스프링이 자동적으로 값을 할당한다.
Controller 클래스에서 DAO나 Service에 관한 객체들을 주입 시킬 때 많이 사용한다.

필드, 생성자, 입력 파라미터가 여러 개인 메소드(@Qualifier는 메소드의 파라미터)에 적용 가능하다.
Type을 먼저 확인한 후 못 찾으면 Name에 따라 주입한다고한다..
Name으로 강제하는 방법: @Qualifier을 같이 명시

Bean을 주입받는 방식 (3가지)

  • @Autowired
  • setter
  • 생성자 (@AllArgsConstructor 사용) -> 권장방식

@Controller

spring에서 Controller를 의미한다. SpringMVC에서 Controller클래스에 쓰인다.

@RestController

Spring에서 Controller중 View로 응답하지 않는, Controller를 의미한다.
method의 반화 결과를 JSON형태로 반환된다.
이 Annotation이 적혀 있는 Controller의 method는 HttpResponse로 바로 응답이 가능하다고 한다. @ResponseBody역할을 자동으로 해주는 Annotation이다.
Controller 과 ResponseBody를 사용하면 ResponseBody의 모든 메소드에서 적용이 가능하다고 한다.

@Controller 와 @RestController의 차이

  • @Controller
    API와 view를 동시에 사용하는 경우에 사용한다.
    대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환한다.
    view(화면) return이 주목적이다.

  • @RestController
    view가 필요없는 API만 지원하는 서비스에서 사용한다.
    Spring 4.0.1부터 제공
    @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
    data(json, xml 등) return이 주목적이다.

즉, @RestController = @Controller + @ResponseBody 이다.

오늘은 간단하게 기억나는 것을을 위주로 정리해보았다. 내일은 더 알아보고 쓰고자 한다.

profile
이상한 나라의 개발하는 예대생

0개의 댓글