About Me/인프런 워밍업 클럽

[인프런 워밍업 클럽 1기] BE 1일차 과제

블로그 주인장 2024. 4. 29.

BE 1일차 과제

인프런 워밍업 클럽 1기 BE 1일차 과제인 어노테이션에 대해 알아보겠습니다.

 

 

어노테이션(Annotation) 이란?

- 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술입니다. 

- 프로그램의 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법입니다.

 

어노테이션 장점 

1. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공합니다. 

2. SW 개발 툴이나 빌드 or 배치 시에 코드를 자동으로 생성할 수 있도록 정보를 제공합니다. 

3. 실행(런타임)시 특정 기능을 실행하도록 정보를 제공합니다.

 

어노테이션 적용 순서

1. 어노테이션을 정의한다. 

2. 클래스에 어노테이션을 배치한다. 

3. 코드가 실행되는 중에 `Reflection`을 이용하여 추가 정보를 획득하여 기능을 실시한다.

  •  Reflection : 프로그램 실행 중에 자신의 구조와 동작을 검사하고 조사하고 수정하는 것이다.
    1. 데이터를 보여주고, 처리하고, 통신을 하기 위한 직렬화(serialization)를 수행한다.
    2. bunding을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와준다.

 

어노테이션 예시

1. @SpringBootApplication

  • SpringBoot를 자동으로 실행시켜주는 어노테이션이다.
@SpringBootApplication
public class LibraryAppApplication {

  public static void main(String[] args) {
    SpringApplication.run(LibraryAppApplication.class, args);
  }

}

 

2. RestController

  • View로 응답하지 않는 컨트롤러를 의미한다.
  • method의 반환 결과를 Json 형태로 반환한다.
  • @RestController가 적혀있는 controller의 method는 HttpResponse로 바로 응답이 가능하다.
@RestController
public class CalculatorController {

  @GetMapping("/add")
  public int addTwoNumbers(CalculatorAddRequest request) {
    return request.getNumber1() + request.getNumber2();
  }

}

 

3. RequestBody

  • 요청이 온 데이터를 바로 class/model 로 매핑하기 위한 어노테이션이다.
  • Http 요청을 받을 때 request로 넘어온 body 값들을 자바 타입으로 파싱해준다.
  @PostMapping("/multiply")
  public int multiplyTwoNumbers(@RequestBody CalculatorMultiplyRequest request) {
    return request.getNumber1() * request.getNumber2();
  }

 

 

커스텀 어노테이션(Custom Annotation)

 

어노테이션 커스텀하는 방법

1. 인터페이스 앞에 @ 를 붙어 생성한다.

public @interface MyAnnotation {

}

 

2. 필요한 메타 어노테이션을 인터페이스 앞에 붙여준다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {

}

 

3. 추가적으로 사용할 어노테이션을 추가해준다. 

4. 변수가 필요하다면 블록 내에 변수를 선언한다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
  String value();
}

 

 

메타 어노테이션(Meta Annotation)의 종류

1. Retention : 해당 어노테이션 정보를 어느 범위까지 유지할 것인지 설정한다.

  • RetentionPolicy.SOURCE : 컴파일 전까지만 유효하고 컴파일 이후에는 사라진다.
  • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효하다.
  • RetentionPolicy.RUNTIME : Reflection을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조 가능하다.

 

2. Target : 해당 어노테이션이 사용되는 위치를 결정한다.

  • ElementType.PACKAGE : 패키지 선언 시
  • ElementType.TYPE : 타입 선언 시
  • ElementType.CONSTRUCTOR : 생성자 선언 시
  • ElementType.FILED : 멤버 변수 선언 시
  • ElementType.METHOD : 메서드 선언 시
  • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언 시
  • ElementType.LOCAL_VARIABLE : 지역 변수 선언 시
  • ElementType.TYPE_PARAMETER : 매개 변수 타입 선언 시

 

3. Documented : JavaDoc 생성 시에 Document에 포함되도록 한다.

4. Inherited : 해당 어노테이션 하위 클래스에 적용한다.

5. Repeatable : Java8부터 지원하며, 연속적으로 어노테이션을 선언하는 것을 허용한다.

 

 

Reference

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

 

 

 

본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다.

반응형

댓글