개발 공부는 어려워
반응형

swagger 설정을 하던 도중 ApiResponse, ApiResponses라는 어노테이션을 사용하게 되었다.

해당 어노테이션의 사용 방법은 responseCode = "200", description="OK" 이러한 방식으로 특정 responseCode가 응답될 경우 설명을 보여주는 코드인데

원래 코드에서 사용하던 내용은 아래와 같다.

 

@ApiResponses({
    @ApiResponse(responseCode = "200", description = "OK"),
    @ApiResponse(responseCode = "400", description = "BAD REQUEST"),
    @ApiResponse(responseCode = "404", description = "NOT FOUND"),
    @ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
})

 

많은 코드중 제일 많이 사용되는 200, 400, 404, 500 코드를 항상 컨트롤러에 사용하기에는 너무 코드가 길어 커스텀 어노테이션을 만들게 되었다.


 

제일먼저 해야할 일은 특정 인터페이스를 만들어야 한다.

 

public @interface 어노테이션명 {

}

 

우리가 사용할 어노테이션의 명칭은 해당 파일명으로 사용한다. 즉 어노테이션명에 TestAnnotation이 들어가서 

 

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ApiResponses({
    @ApiResponse(responseCode = "200", description = "OK"),
    @ApiResponse(responseCode = "400", description = "BAD REQUEST"),
    @ApiResponse(responseCode = "404", description = "NOT FOUND"),
    @ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
})
public @interface TestAnnotation이 {

}

@TestAnnotation이
public class Test(){
	
    public void A(){
    
    }
}

 

이런 파일을 생성한다면 앞으로 다른 class 파일에서 해당 어노테이션을 사용할 경우 @TestAnnotation으로 사용한다.

 


 

커스텀 어노테이션을 사용할떄 사용해야 하는 기본 어노테이션이 존재한다.

1. Target - 어노테이션을 적용할 위치

    - ElementType.ANNOTATION_TYPE
        - 어노테이션 타입 선언

    - ElementType.PACKAGE
        - 패키지 선언

    - ElementType.CONSTRUCTOR
        - 생성자 선언

    - ElementType.TYPE
        - 타입 선언
        
    - ElementType.FIELD
        - 멤버 변수 선언

    - ElementType.LOCAL_VARIABLE
        - 지역 변수 선언

    - ElementType.METHOD
        - 메서드 선언

    - ElementType.PARAMETER
        - 전달인자 선언

    - ElementType.TYPE_PARAMETER
        - 전달인자 타입 선언

    - ElementType.TYPE_USE
        - 타입 선언

2. Retention - 해당 어노테이션이 언제까지 유지되는지 설정

    - RetentionPolicy.SOURCE
        - 컴파일전까지만 존재 
        - 코드 분석에 사용

    - RetentionPolicy.CLASS
        - 컴파일러가 클래스를 참조할 때까지 유효
        - 기본값
        - 다른 툴이 바이트코드를 분석할 떄 사용

    - RetentionPolicy.RUNTIME
        - 런타임시에도 JVM에 의해서 유지
        - 프레임워크나, 라이브러리에서 사용하는 어노테이션

반응형

'study > spring' 카테고리의 다른 글

Spring Boot에서 커스텀 어노테이션 작성법  (1) 2024.06.13
네이버 메일 보내기  (0) 2024.05.27
Jpa @CreateData어노테이션  (0) 2023.12.11
JPA 설정  (0) 2023.11.21
Thymeleaf 설정  (0) 2023.11.21
profile

개발 공부는 어려워

@신입개발자하랑이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!