Annotation

김찬희·2024년 4월 29일

Spring

목록 보기
3/6

@Annotation

자바에서 Annotation은 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다. 주로, 컴파일 및 다른 프로그램에게 유용한 정보를 제공하기 위해 사용된다.

메타데이터: 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지 알려주는 추가 정보(주석)이다.

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

  • Annotation을 사용하면 코드와 설정을 같은 위치에 배치하여 코드의 가독성을 향상시킨다.
  • 클래스, 메서드, 필드, 파라미터 등과 관련된 정보가 함께 있어 코드를 읽고 이해하기 쉬워지며 특히, 코드의 흐름을 파악하기 쉬워진다.
  • 별도의 설정 파일을 작성하지 않고도 어노테이션을 사용하여 설정을 간소화할 수 있다. 이는 개발자가 코드에 직접 설정을 기술할 수 있으므로 설정 관리를 단순화시킨다.
  • Annotation을 통해 공통적인 코드 패턴이나 설정을 재사용할 수 있다. 이는 코드의 중복을 줄이고 효율적으로 코드를 작성할 수 있도록 도와준다.
  • 필요한 기능이나 제약 사항을 정의하기 위해 커스텀 Annotation을 직접 정의할 수 있다. 이것은 프로젝트에서 특정한 요구사항에 대응하기 위해 유연하고 효율적인 방식으로 사용할 수 있다.

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

사용자가 직접 여러 Annotation을 혼합하거나 정의하여 어노테이션을 만들 수 있다.
기본적으로 인터페이스를 정의하는 것과 유사하며 @interface 뒤에 사용할 어노테이션의 이름을 정의하고 속성을 설정한다.

import java.lang.annotation.*;

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

예를 들어, 위 코드는 간단한 로깅 기능을 위한 어노테이션을 만들어 보았습니다. 이 어노테이션은 특정 메서드가 호출될 때 로깅을 수행하도록 할 것입니다.

import org.springframework.stereotype.Service;

@Service
public class MyService {

    @Loggable
    public void doSomething() {
        System.out.println("Something is done.");
    }
}

위의 코드에서 doSomething() 메서드는 @Loggable 어노테이션으로 표시되어 있으므로, 해당 메서드가 호출될 때 로깅을 추가할 수 있습니다.

  • 이때, Annotation 정의에 사용한 메타 Annotation은
    @Retention(RetentionPolicy.RUNTIME): 어노테이션 정보를 런타임까지 유지한다는 것을 의미하며 이렇게 하면 실행 중에 리플렉션(reflection)을 사용하여 어노테이션 정보를 읽을 수 있다.
    @Target(ElementType.METHOD): 이 어노테이션은 메서드에만 적용하도록 설정한다.

0개의 댓글