어노테이션(Annotation)

주석 & 어노테이션

주석은 사람에게 코드를 설명에 대한 정보를 전달하는 것이라면,

어노테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달한다.


어노테이션(Annotation) 이란?

어노테이션은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용된다.

자바 어노테이션은 클래스 파일에 임베드 → 컴파일러에 의해 생성 → JVM에 포함되어 동작한다.

 

어노테이션의 역할

  • 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다.

  • 프로그램 빌드나 배치 시, 코드를 자동으로 생성할 수 있도록 정보를 제공한다.

  • 런타임에 특정 기능을 실행하도록 정보를 제공한다.

  • 어노테이션을 만들 때, 용도를 분명하게 해야 한다.

    • 소스 상에서만 유지해야 할지

    • 컴파일된 클래스에도 유지해야 할지

    • 런타임 시에도 유지해야 할지를 지정해야 한다.

어노테이션은 @를 사용하여 작성하며, 해당 타겟에 대한 동작을 수행하는 프로그램 외에는다른 프로그램에게 영향을 주지 않는다.

 

어노테이션의 종류

 

표준 어노테이션 (Built-in Annotation)

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

@Override

컴파일러에게 메서드를 오버라이딩 하는 것이라고 알린다.

만약 부모 클래스 또는 구현해야 할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류가 난다.

@Deprecated

앞으로 사용하지 않을 대상임을 알린다.

@FunctionalInterface

함수형 인터페이스라는 것을 알린다.

메소드가 없거나 2개 이상 되면 컴파일 오류가 난다. (Java 8 이상)

@SuppressWarning

컴파일러가 경고 메시지를 나타내지 않는다.

@SafeVaragrs

제네릭과 같은 가변 인자의 매개변수를 사용할 때의 경고를 나타내지 않는다. (Java 7 이상)

 

메타 어노테이션 (Meta Annotation)

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

@Target

어노테이션을 정의할 때, 적용 대상을 지정하는데 사용한다.

@Documented

어노테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.

@Inherited

어노테이션이 하위 클래스에 상속되도록 한다.

@Repeatable

어노테이션을 반복해서 적용할 수 있도록 한다.

 

사용자 정의 어노테이션 (Custom Annotation)

사용자가 직접 정의하여 사용하는 어노테이션이다.

커스텀 어노테이션을 만들려면 @interface [어노테이션 이름] 이라는 형태로 어노테이션을 정의해야 한다.

어노테이션을 정의할 때, 생성되는 어노테이션에 대한 메타 어노테이션은 어노테이션 정의 앞쪽에 붙여준다.

 


강의에서 활용한 어노테이션

@RestController

현재 클래스를 Controller(API의 진입 지점)로 등록한다.

메소드를 만들어서 API가 메소드를 사용하게 만들 수 있다.

 

@GetMapping("/add")

Get은 HTTP Method의 GET을 의미

HTTP path가 /add인 API로 지정한다.

* ("/add")은 API 명세를 정했던 GET /add를 의미

 

@RequestParam

주어지는 쿼리를 함수 파라미터에 넣는다.

Query를 통해 넘어온 데이터를 이 함수에 연결해 줄 때는 앞에 @RequestParam 이라고 적어주어야 한다.


Reference

https://nesoy.github.io/articles/2018-04/Java-Annotation

https://hbase.tistory.com/169

https://ittrue.tistory.com/156

댓글을 작성해보세요.

채널톡 아이콘