이끌든지 따르든지 비키든지

Software Development/Java

[JAVA] Annotation

SeongHo5 2023. 10. 3. 18:50

Java는 어노테이션(Annotation)이라는 프로그램의 코드에 메타데이터를 추가하는 특별한 형태의 주석을 제공한다.

이 단어의 사전적 의미도 말 그대로 '주석'이다.

 

자바에서 주석은 // 로 시작하는 거 아니었나요?

 

둘 다 주석이 맞다. 둘의 차이점은,

 

// 로 시작하는 주석(Comment)개발자에게 코드 설명 등 정보를 제공하고,

 

@ 로 시작하는 어노테이션(Annotation)프로그램, 컴파일러 등 에게 추가 정보를 제공한다.

 


 

주로 사용되는 표준 어노테이션 중 몇 가지를 살펴보자면,

 

@Override

메서드 선언부에 작성해 해당 메서드가 오버라이드되었음을 알리는 어노테이션이다.

컴파일러는 @Override가 붙은 메서드의 오버라이드가 올바르게 이루어졌는지를 검사하고, 잘못된 부분(리턴 타입이 다르거나, 매개변수가 다르거나)이 있으면 경고한다.

 

@Deprecated

이 어노테이션은 코드에서 클래스, 메서드 등이 기능상, 보안상 이유로 더 이상 권장되지 않거나 사용되지 않음을 다른 개발자에게 나타낼 때 주로 사용한다.

만약 @Deprecated가 붙은 객체를 사용하려 하면, IDE에서 해당 코드에 취소선을 적용시켜 사용을 권장하지 않음을 알려준다.

 

@SuppressWarnings

이 어노테이션이 붙은 메서드에서는 컴파일러의 경고(주로 제네릭 코드를 작성할 때)를 의도적으로 무시하고 코드를 작성할 수 있다.

 


Spring에서의 Annotation

Spring 프레임워크를 사용할 때도 의존성 주입 등 여러 기능을 위해 어노테이션을 사용하는데, 이 중 몇 가지를 살펴보면 다음과 같다.

 

@Controller

 

Spring의 Controller를 의미한다. Spring MVC에서 Controller클래스에 쓰인다.

 

@RestController

 

RESTful 웹 서비스의 엔드포인트를 처리하는 컨트롤러 클래스에 쓰인다.

 

@RequestMapping

 

요청 URL과 컨트롤러의 메서드를 매핑하기 위해 사용한다.

간결하게 사용하기 위해 @GetMapping, @PostMapping를 메서드에 매핑해 사용할 수도 있다.

 

 

GET /ping 요청에 "Server is Listening!"이라고 응답하는 간단한 코드 예시

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SpringController {

    @GetMapping("/ping")
    public String pong() {
        return "Server is Listening!";
    }
}