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

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

어노테이션을 사용하는 이유 (효과) 는 무엇일까?

우리는 프로그래밍을 진행하면서 주석을 자주 사용한다 주석을 사용하는 이유는 개발의 과정에서 더 직관적이고 코드를 이해하기 쉽게 하고, 다른 사람에게 내 코드를 보일 때 에도 쉽게 이해할 수 있게 정보를 제공 하기 위해 제공한다 이와 마찬가지로 어노테이션도 비슷한 기능을 한다고 볼 수 있다 다만 주석은 타 프로그래머나 사람에게 정보를 제공하는 것 이라면 어노테이션은 특정 코드에 대해 프로그램에 추가 정보를 전달해 프로그램을 유용하게 개발 할 수 있다

어노테이션의 활용

  1. 런타임 과정에서 특정 기능을 실행하게 해준다

  2. 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있게 해준다

  3. 컴파일러에게 문법 에러를 체크하게 정보를 제공한다

어노테이션의 종류

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

@Override

컴파일러에게 오버라딩하는 메소드라는 것을 알린다.

 

@Deprecated

앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.

 

@SuppressWarnings

컴파일러의 특정 경고 메시지가 나타나지 않게 해 준다.

 

@SafeVarargs

제네릭 타입의 가변 인자에 사용한다.

메타 어노테이션: 어노테이션을 위한 어노테이션으로, 어노테이션을 정의할 때 사용된다

@Target

어노테이션이 적용 가능한 대상을 지정한다.

@Retention

어노테이션이 유지되는 기간을 지정한다.

나만의 어노테이션은 어떻게 만들 수 있을까?

1. 어노테이션 생성
어노테이션은 다음과 같이 인터페이스 앞에 @를 붙여서 생성할 수 있다.
public @interface RestControllerWithSwagger {
    
}
 
 
 
2. 메타 어노테이션 추가
메타어노테이션중 그 중에서 필요한 것들을 적용하면 된다.
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.TYPE)
public @interface RestControllerWithSwagger {

}
 
 
3. 적용할 어노테이션 추가
추가적으로 적용할 어노테이션이 있으면 추가해준다. 우리는 @Api와 @RestController라는 어노테이션을 공통으로 묶을 것이므로 이를 추가해준다.
@Api
@RestController
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.TYPE)
public @interface RestControllerWithSwagger {
    String name() default "RestController";
    String value();
}
 
 
 
 
4. 변수 추가
어노테이션에 값을 부여하기를 원한다면 변수를 다음과 같이 선언해줄 수 있다.
@Api
@RestController
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.TYPE)
public @interface RestControllerWithSwagger {
    String name() default "RestController";
    String value();
}
 
 
 
 
5. 적용하기
위와 같은 과정으로 어노테이션을 생성하였으면 이제 다음과 같이 적용할 수 있다.
@RestControllerWithSwagger(value = "RestMemberController", name = "RestMemberController")
@RequiredArgsConstructor
@Test1
@RequestMapping("/member")
public class RestMemberController {

    private final MemberService memberService;

    @ApiOperation("멤버 목록 반환")
    @GetMapping("/list")
    public ResponseEntity<String> upload() {
        return ResponseEntity.ok(memberService.getList());
    }

}

출처: https://mangkyu.tistory.com/130 [MangKyu's Diary:티스토리]

참초:GPT,https://steady-coding.tistory.com/614

 

댓글을 작성해보세요.