[Spring] annotation이란? 왜 쓸까?

2023. 12. 19. 20:32· 웹/스프링
목차
  1.  
  2. 1. Annotation이란?
  3. 2. Annotation의 종류
  4. 3. Spring에서 사용되는 대표적인 Annotation

스프링 공부를 하다가 기본적인 정의는 짚고 넘어가야될 것 같아서 정리를 하기로 했다.

백엔드 개발을 할 때도 모르는 부분은 그냥 검색만 하고 넘어갔는데 이 기회에 정리를 하고 어떤 annotation들이 있는지 파악하고 넘어가도 괜찮을 것 같다.

 

1. Annotation이란?

 

Annotation(@)은 사전적 의미로는 주석이라는 뜻이다.
자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.(meta data : 데이터를 위한 데이터)

 Annotation을 사용하면 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가한다.

 

 

어노테이션이 하는 역할

  1. 컴파일러에게 문법 에러를 체크하도록 정보를 제공한다.
  2. 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
  3. 런타임에 특정 기능을 실행하도록 정보를 제공한다.

 

2. Annotation의 종류

 - 표준 어노테이션                                   - 메타 어노테이션                                   - 사용자 정의 어노테이션


자바에서 기본적으로 제공하는 어노테이션


@Override
- 메서드를 오버라이딩하는 것

@Deprecated
- 앞으로 사용하지 않을 대상임

@FunctionalInterface
- 함수형 인터페이스

@SuppressWarning
- 컴파일러가 경고메시지를 나타내지 않음

@SafeVaragrs
- 제네릭과 같은 가변 인자의 매개변수를 사용할 때 경고를 표시하지 않음 



어노테이션에 붙이는 어노테이션으로, 어노테이션을 정의한다.


@Target
- 어노테이션을 정의할 때 대상을 지정

@Documented
- 정보를 javadoc로 작성된 문서에 포함

@Inherited
- 어노테이션이 하위 클래스에 상속되도록

@Retention
- 어노테이션이 유지되는 기간을 정함

@Repeatable
- 어노테이션 반복 적용


사용자가 직접 정의해서 사용하는 어노테이션



















 

3. Spring에서 사용되는 대표적인 Annotation

@Component

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

Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록합니다.

 

@Controller

SpringMVC에서 해당 class가 Controller의 역할을 한다고 명시

 

@Restcontroller

컨트롤러가 rest 방식을 처리하기 위한 것임을 명시- 단순히 객체만을 반환하고 객체 데이터는 JSON, XML 형식으로 HTTP 응답에 담아서 전송

 

@Controller와 @RestController는 뭐가 다른지 궁금해서 찾아봤는데
@RestController == @Controller + @ResponseBody라고 생각하면 된다. 
Spring4.0에서 RESTful 웹 서비스를 보다 쉽게 개발할 수 있도록 추가 되었다. 

@Controller @ResponseBody
public class MVCController{
           logic...
}

@RestController
public class ReftFulController{
           logic...
}

두개 동일한 동작을 한다.

 

@Service

Service Layer 클래스에 사용

 

@ComponentScan

Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록합니다. @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록해줍니다.

 

@Configuration

설정클래스임을 명시하고 아래의 Bean을 사용해서 자바 객체를 수동으로 지정할 수 있다.

 

@Bean

스프링 컨테이너가 관리하는 자바객체로 수동 지정한다. 메소드 이름으로 빈 이름이 결정되므로 항상 unique하게 정해야 한다.
@Configuration으로 지정된 클래스에 작성한다.

 

@Autowired

Bean 객체를 주입받기 위한 방법은 3가지가 있다 ( @Autowired, 생성자, Setter ) 이 중에서 @Autowired를 사용할 수 있고 Spring Framework가 Class를 보고 Type에 맞게 Bean에 주입한다. - DI(의존성 주입)

 

@Repository

DAO 또는 Repository 클래스에 사용한다.
DataAccessException 자동변환과 같은 AOP 적용대상을 선정하기 위해 사용한다.

 

@RequestMapping("url-pattern")

호출하는 클라이언트의 정볼르 가져다가 서버(controller)에 전달해주는 역할

-> 간단하게 얘기하면 웹에서 요청이 들어왔을 때 어떤 컨트롤러가 호출이 되어야 하는지 알려주는 지표


  
@RequestMapping("/api/v1")

 

@PostMapping("url-pattern")

해당 Url을 post method일 때 매핑한다.

 

@GetMapping("url-pattern")

해당 Url을 get method일 때 매핑한다.

 

@ReqestParam

사용자가 전달하는 값을 1:1로 매핑해준다.

 


  
@RequestMapping("/request_mapping")
public String test(@RequestParam(name = "age") Integer age,
@RequestParam(name = "time") Date time ){
...
}

 

@PathVariable("key")

uri 템플릿 변수에 접근할 때 사용한다. uri에 있는 변수를 가져올 수 있다.


  
@GetMapping("/member/{shortUrl}")
public String shorten(@PathVariable("shortUrl") String shortUrl){
return "short: " + shortUrl;
}

 

@RequestHeader

Request의 header 값을 가져올 수 있으며, 해당 Annotaion을 쓴 메소드의 파라미터에 사용한다.


  
@PostMapping("/data")
public String getToken(@RequestHeader(value= "Authorization" String Auth){
// 요청 처리
}

 

@RequestBody

HTTP요청의 body내용에 접글할 때 사용한다.

 


  
@PostMapping("/data")
public String add(@RequestBody User user){
String name = user.name;
String age = user.age;
}

 

@RequiredArgsConstructor

Lombok에서 스프링에서 DI(의존성 주입) 방법 중에 생성자 주입을 임의의 코드없이 자동으로 설정해주는 어노테이션 final이나 @NonNull로 선언된 필드만을 파라미터로 받는 생성자를 자동 생성한다.

 


  
@RestController
@RequiredArgsConstructor
@RequestMapping("/example")
public class RequiredArgsConstructorControllerExample {
private final FirstService firstService;
private final SecondService secondService;
private ThirdService thirdService;
//final이 없기 때문에 직접 생성자를 주입시켜줘야 됨
...
}
//
//@RequiredArgsConstructor를 사용하지 않았을 때 직접 생성자를 주입시켜주는 모습
//
@RestController
@RequestMapping("/example")
public class RequiredArgsConstructorControllerExample {
private final FirstService firstService;
private final SecondService secondService;
private ThirdService thirdService;
@Autowired
public RequiredArgsConstructorControllerExample(FirstService firstService, SecondService secondService, ThirdService thirdService) {
this.firstRepository = firstRepository;
this.secondRepository = secondRepository;
this.thirdRepository = thirdRepository;
}
}

 

@AllArgsConstructor/NoArgsConstructor

AllArgsCon - 클래스의 모든 필드값을 파라미터로 받는 생성자를 자동으로 생성한다.


  
@AllArgsConstructor
public class Person {
private String name;
private int age;
// getters and setters
}
//어노테이션 사용하지 않을 경우
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}

 

NoArgsCon - 파라미터가 없는 디폴트 생성자를 자동으로 생성한다.


  
@NoArgsConstructor
public class Person {
private String name;
private int age;
// getters and setters
}
//어노테이션 사용하지 않을 경우
public class Person {
private String name;
private int age;
public Person(){}
}

 


참고

https://rebornbb.tistory.com/entry/SpringBoot-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-Annotation-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EC%A0%95%EB%A6%AC

https://ittrue.tistory.com/156

https://dncjf64.tistory.com/288

 

  1.  
  2. 1. Annotation이란?
  3. 2. Annotation의 종류
  4. 3. Spring에서 사용되는 대표적인 Annotation
'웹/스프링' 카테고리의 다른 글
  • [Spring] - URL Shortener 설계 - (2) - 구현
  • [Spring] - URL Shortener 설계 - (1) - 정리
  • [Spring] Spring이란?
  • [Java/Spring] - Spring Security 로그인
Casteira
Casteira
할 뿐
Casteira
SpongeCake
Casteira
전체
오늘
어제
  • __Main__ (104)
    • 알고리즘 (65)
      • 개념 (6)
      • 문제 (58)
    • 컴퓨터 구조 (9)
      • 자료 구조 (2)
      • OS (7)
    • 웹 (1)
      • 자바 (1)
      • 스프링 (5)
      • SQL (0)
    • 기록 (4)
      • 포트폴리오 (2)
    • 정글 (18)
      • TIL (17)

블로그 메뉴

  • 🗒️ 깃허브
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • dp
  • 백준
  • 코딩테스트
  • 백준 골드
  • 크래프톤 정글
  • 크래프톤
  • java
  • spring
  • springboot
  • annotation
  • framework
  • 정글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
Casteira
[Spring] annotation이란? 왜 쓸까?
테마상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.