본문 바로가기

프로그래밍/Java

Java_애너테이션·어노테이션(annotation)

반응형

- 애너테이션(annotation)
: 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다.
주석처럼 프로그래밍 언어에 영향을 미치지 않으면 유용한 정보를 제공한다.



- 표준 애너테이션

 

  • @Override

: 메서드 앞에만 붙을 수 있는 애너테이션으로, 조상의 메서드를 오버라이딩 할 때 사용한다.

class Fruit {
    void fruitMethod() {}
}

class Apple extends Fruit {
    @Override
    void ffruitMethod() {} //컴파일 에러. 스펠링이 잘못됨.
}

→ 오버라이딩 할 때 메서드의 이름을 잘못 작성하는 경우가 있는데 컴파일러는 이를 오타로 인식하는 것이 아닌 새로운 메서드가 추가된 것으로 인식한다. 이 때, 오버라이드 메서드를 사용하여 명시적으로 선언하게 되면 많은 메서드 중에서 어떠한 메서드가 부모 클래스로부터 오버라이딩이 되었는지 쉽게 알 수 있다.

  • @Deprecated

: 다른 것으로 대체된 필드나 메서드에 붙여 이제 사용되지 않는다는 것을 알릴 때 사용한다.

@Deprecated가 표시되어 있는 메서드나 필드를 사용하면 사용시 워닝 메시지를 보여준다. 컴파일러에게 이 메서드는 없어질 거라는 걸 알려주고 쓰지 말도록 경고하는 것이다.

@Deprecated
public void depreMethod() {
    //코드
}

 

  • @FunctionalInterface

: 함수형 인터페이스는 1개의 추상 메서드를 갖는 인터페이스를 말하는데, 함수형 인터페이스를 선언할 때 컴파일러가 인터페이스를 올바르게 선언했는지 확인할 때 사용한다.

함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근되기 때문이다.

 

  • @SuppressWarnigs

: 컴파일러가 보여주는 경고메시지가 나타나지 않게 억제하고 경고가 발생한 것을 알면서도 묵인할 때 사용한다.

@SupperessWarnings("all") 모든 경고 억제
@SupperessWarnings("cast") 타입 캐스트 관련 경고 억제
@SupperessWarnings("dep-ann") 사용하지 말아야할 주석 관련 경고 억제
@SupperessWarnings("deprecation") Deprecated 메서드를 사용한 경우 발생하는 경고 억제
@SupperessWarnings("fallthrough") switch문에서 break 구문 누락 관련 경고 억제
@SupperessWarnings("finally") finally 블럭 관련 경고 억제
@SupperessWarnings("null") null 관련 경고 억제
@SupperessWarnings("rawtypes") 지네릭을 사용하는 클래스 매개 변수가 특정되지 않았을 때 경고 억제
@SupperessWarnings("unchecked") 검증되지 않은 연산자 관련 경고 억제
@SupperessWarnings("unused") 사용하지 않는 코드 관련 경고 억제





- 메타 애너테이션
: 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때 애너테이션의 적용대상이나 유지기간을 지정한다.

 

  • @Target

: 애너테이션이 적용가능한 대상을 지정하는데 사용한다.

 

  • @Retention

: 애너테이션이 유지되는 기간을 지정한다.

 

  • @Inherited

: 애너테이션이 자손 클래스에 상속되도록 하며, 만약 조상클래스에 Inherited를 붙이면 자손클래스에도 애너테이션이 적용된 것과 같다.

 

  • @Repeatable

: 하나의 대상에 여러 애너테이션을 적용할 때 사용한다.

 

  • @Documented

: 자바 문서에도 애너테이션 정보가 표현된다.




- 애너테이션 타입 정의
: 애너테이션을 정의하는 방법은 인터페이스를 정의하는 것과 같고 앞에 @만 붙이면 된다.

@interface 애너테이션이름 {
    타입 요소이름();
        ...
}

→ 애너테이션의 메서드는 추상메서드이며, 애너테이션을 적용할 때 지정한다. (순서X)
→ 적용시 값을 지정하지 않으면, 사용될 수 있는 기본값을 지정할 수 있다.


모든 애너테이션의 조상은 Annotation인데 상속을 허용하지 않으므로 extends Annotation으로 명시할 수 없다.

반응형