Java

123. 애너테이션 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 6. 09:30

1. 애너테이션이란?

  • 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공
@Test	// 이 메서드가 테스트 대상임을 테스트 프로그램에게 알린다.
public void method() {
	...
}

 

2. 표준 애너테이션

  • Java에서 제공하는 애너테이션
애너테이션 설명
@Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알린다.
@Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.
@SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해준다.
@SafeVarargs 지네릭스 타입의 가변인자에 사용한다.(JDK1.7)
@FunctionalInterface 함수형 인터페이스라는 것을 알린다(JDK1.8)
@Native native메서드에서 참조되는 상수 앞에 붙인다.(JDK1.8)
@Targer* 애너테이션이 적용가능한 대상을 지정하는데 사용한다.
@Documented* 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited* 애너테이션이 자손 클래스에 상속되도록 한다.
@Retention* 애너테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable* 애너테이션을 반복해서 적용할 수 있게 한다.(JDK1.8)

 

3. @Override

  • 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.
  • 오버라이딩할 때 메서드이름을 잘못적는 실수를 하는 경우가 많다.
  • 오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이자.
class Parent {
    void parentMethod() {}
}

class Child extends Parent {
    @Override
    void parentmethod() {}	// 에러. 조상 메서드의 이름을 잘못 적었음.
}

 

4. @Deprecated

  • 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
@Deprecated	// @Deprecated :사용을 권장하지 않음
public int getDate() {
    return normalize().getDayofMonth();
}

 

5. @FunctionalInterface

  • 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크
  • 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있음
@FunctionalInterface
public interface Runnable {
    public abstract void run();	// 추상 메서드
}

 

6. @SuppressWarnings

  • 컴파일러의 경고메시지가 나타나지 않게 억제한다.
  • 괄호()안에 억제하고자하는 경고의 종류를 문자열로 지정
@SuppressWarnings("unchecked")		// 지네릭스와 관련된 경고를 억제
ArrayList list = new ArrayList();	//지네릭 타입을 지정하지 않았음.
list.add(obj);				// 경고 발생
  • 둘 이상의 경고를 동시에 억제가능
@SuppressWarnings({"deprecation", "unchecked", "varargs"})