( Spring ) @Annotation 의미와 종류

ZZOOO

·

2021. 4. 2. 10:21

안녕하세요 오늘은 Spring framework 에서 편리하게 사용되는 Annotation에 대해 글을 적어보고자 합니다.


📘 사전적 Annotation ?

 

 

Annotation 의 사전적 의미는 주석 입니다.

흔히 개발자가 (?) 알고 있는 주석은 개발을 하면서 본인 또는 협업 개발자가 소스에 대한 부가적인 설명을 덧붙일 때 

유용하게 사용되는 기능입니다.

하지만 Annotation이 가지고 있는 주석의 의미는 조금 다릅니다.

 


💻 개발적 Annotation ? 

 

 

JEE5 (Java Platform, Enterprise Edition 5) 부터 새롭게 도입된 요소로써

Java 개발 코드와 같이 사용되는 메타 데이터 중 하나입니다.

또한 프로그래밍 컴파일러가 클래스나 특정 서비스에 대한 에러를 체크하는 편리한 기능을 제공하고 있습니다.

 

Ex) @Pattern, @NotEmpty, @Max, @Min ....

 

 

( 메타 데이터 ? 는 뭐야 )

데이터를 다루기 위해서 기존에 추가되어있는 정보를 뜻합니다.

데이터의 활용방법, 규칙 , 데이터의 정보를 표기해놓은 것을 뜻합니다.

Annotation 의 장점 

 

 

Java는 객체지향 프로그래밍 언어이기 때문에 선언적 프로그래밍 방식을 사용합니다.

그렇다 보니 어떤 한 가지의 서비스나 로직을 생성하기 위해선 여러 객체들을 생성해야 하는 단점이 있습니다.

프로젝트의 규모가 작다면 논외지만, 프로젝트의 규모가 크다면 그만큼 객체들 또는 로직이 커지기 때문에

문제가 생길 수밖에 없습니다.

 

하지만 ? Annotation 을 사용한다면 ?

사실 큰 변화는 없습니다. 그러나 Annotation으로 선언해놓은 객체 또는 데이터들의 유효성 검사

Model Class에 직접 명시하면서 소스 가독성이 높아집니다. 또한 코드의 양도 줄어들겠지요? 


Annotation 의 단점 

 

 

Annotation은 Module 또는 Application메타 데이터를 설정할 수 없습니다.

Annotation은 Class 단위 Package Level에 한정되기 때문에

여러 클래스에 공통적으로 Annotation을 설정할 수 없다.

 


Annotation 의 형태

 

 

  • Marker Annotation ( 이름만 ) : @Annotation
  • Single - Element Annotation ( 원소 하나만 ) : @Annotation( elementValue )
  • Normal Annotation ( 원소 여러 개 ) : @AnnotationName ( element=value, element = value2 .. )

 

다음과 같이 나눌 수 있습니다.


 

Spring Annotation 종류 

 

 

저도 Spring framework를 이용하여 프로젝트를 진행 중이다 보니 자주 쓰이는 것들 위주로 정리해보겠습니다.

 

 

Annotation ( @ ~ ) Content
@SpringBootApplication  - Application 클래스 class 상단에 선언합니다

 - @EnableAutoConfiguration , @ComponentScan,
   @Configuration 이 세가지의 어노테이션을 제공하는것과 같은 의미입니다. 
@RestController   - Spring MVC Conroller@ResponseBody가 추가 된 형태입니다.

 - JSON 형태로 객체 데이터를 반환합니다. 
@RequestBody , @ResponseBody @ResponseBody는 Http요청의 Body Content를 Java 객체로 변환해줍니다..

@ResponseBody는 Java 객체를 Http 요청의 Body Content로 매핑합니다.
@PostMapping 
@GetMapping
@PutMapping
@DeleteMapping
 - 예전에는 RequestMapping에서 분류해서 사용했었다고합니다.

 - HTTP Method 에 해당되는 메소드에 선언합니다.

 - 본인은 ajax에서 url로 mapping 시켜서 Controller로 데이터를 전달하는 방식으로 사용하고있습니다.
@Autowired - 사용자가 주입하려하는 객체의 타입이 일치하는 객체를 자동으로 주입합니다.
@Getter, @Setter  Get(), Set() 메소드를 컴파일시 생성해준다.

 

제가 프로젝트에서 자주 사용하는 Annotation  들은 주로 이 정도인 것 같습니다.

 


 

궁금하신 내용이 있다면 댓글 바랍니다.

감사합니다.

반응형