[인프런 워밍업 클럽 스터디 1기 과제 #1] 어노테이션

qk·2024년 4월 29일

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

1-1. 어노테이션이란?

어노테이션은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용되는 것으로 주석과 같은 의미를 가진다.
@를 사용하여 작성하며, 해당 타겟에 대한 동작을 수행하는 프로그램 외에는 다른 프로그램에게 영향을 주지 않는다.

1-2. 어노테이션의 역할은?

  • 컴파일러에게 문법 오류를 체크하도록 정보를 제공한다.
  • 빌드할 때 코드를 자동으로 생성하도록 정보를 제공한다.
  • 런타임에 특정 기능을 실행하도록 정보를 제공한다.

1-3. 어노테이션의 효과는?

1. 코드 가독성 : 어노테이션은 코드와 설정을 같은 위치에 배치하므로 읽고 이해하기 쉽다. 클래스, 메서드, 필드, 파라미터 등 연관된 코드와 가까이 있기 때문에 흐름을 따라가기 쉽다.
2. 설정의 간소화 : 별도의 설정 파일 작성 없이 어노테이션 적용을 통해 설정을 간소화할 수 있다.
3. 중복 코드 제거 : 공통적인 코드 패턴이나 설정을 재사용할 수 있기 때문에 코드의 중복을 줄이고 효율적으로 코드를 작성할 수 있다.
커스텀 어노테이션 : 직접 커스텀 어노테이션을 정의함으로 필요한 기능이나 제약 사항을 정의하여 사용할 수 있다.
4. 프로세서를 통한 검증 및 코드 생성 : 어노테이션 프로세서를 이용해 컴파일 시점에 어노테이션을 처리하고 검증할 수 있다. 또한 코드를 자동으로 생성하거나 수정할 수 있기에 효과적으로 기능을 구현할 수 있다.

1-4. 어노테이션의 종류는?

표준 어노테이션

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

  • @Override : 컴파일러에게 메서드를 오버라이딩하는 것이라고 알린다. 
  • @Deprecated : 앞으로 사용하지 않을 대상임을 알린다.
  • @FunctionalInterface : 함수형 인터페이스라는 것을 알린다.
  • @SuppressWarning : 컴파일러가 경고 메시지를 나타내지 않는다.
  • @SafeVaragrs : 제네릭과 같은 가변 인자의 매개변수를 사용할 때의 경고를 나타내지 않는다.

메타 어노테이션

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

  • @Target : 어노테이션을 정의할 때 적용 대상을 지정하는 데 사용한다.
  • @Documented : 어노테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.
  • @Inherited : 어노테이션이 하위 클래스에 상속되도록 한다.
  • @Retention : 어노테이션이 유지되는 기간을 정하기 위해 사용한다.
  • @Repeatable : 어노테이션을 반복해서 적용할 수 있도록 한다.

사용자 정의 어노테이션

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

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

2-1. 어노테이션의 생성

  1. '@interface' 키워드를 사용하여 어노테이션을 선언한다.
  2. 필요한 매개변수를 선언한다. 이렇나 매개변수는 어노테이션의 속성이 되며, 속성의 이름과 타입을 정한다.
  3. 필요한 기본값(default)을 속성에 설정할 수 있다.
  4. 어노테이션을 사용할 때는 '@' 기호를 이용하여 어노테이션의 이름을 사용하고, 필요한 속성값을 설정한다.
import java.lang.annotation.*;

// 어노테이션 선언
@Retention(RetentionPolicy.RUNTIME) // 어노테이션의 유지 정책 설정 (런타임까지 유지)
@Target(ElementType.METHOD) // 어노테이션을 메서드에 적용할 수 있도록 설정
public @interface CustomAnnotation {
    String value() default "Default Value"; // 문자열 형태의 속성 정의 (기본값 설정 가능)
    int count(); // 정수형 속성 정의
    boolean enabled() default true; // 불리언 형태의 속성 정의
}

'@Retention'과 '@Target'을 사용하여 어노테이션의 유지 정책과 적용 대상을 설정했다. 또한, 'value', 'count', 'enabled'와 같은 속성을 정의하였다.

public class MyClass {
    @CustomAnnotation(count = 42, enabled = false)
    public void method() {
        // 메서드 내용
    }
}

위에서 'MyClass' 클래스의 메서드에 '@CustomAnnotation' 어노테이션을 적용했다. 이때 속성값을 설정하고, 설정하지 않은 속성값은 기본값을 사용한다.

프로그램 런타임 중에는 리플렉션(reflection)을 이용하여 어노테이션 정보를 읽을 수 있다. 리플렉션을 통해 메소드나 클래스에 적용된 어노테이션의 값을 접근하고 활용할 수 있다.

출처

https://ittrue.tistory.com/156
https://woo-chang.tistory.com/73
https://koonsland.tistory.com/m/297

0개의 댓글