- 애너테이션(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으로 명시할 수 없다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_컴파일 시점 VS 런타임 시점 (0) | 2023.02.02 |
---|---|
Java_쓰레드(Thread) (0) | 2023.01.31 |
Java_열거형(enum)_열거형의 정의와 사용, 열거형의 조상, 열거형에 멤버 추가 (0) | 2023.01.23 |
Java_제네릭스·지네릭스(2)_제네릭스의 제약, 와일드 카드, 제네릭 메서드, 제네릭 타입의 형변환 (0) | 2023.01.19 |
Java_제네릭스·지네릭스(1)_타입 변수, 제네릭스 용어, 제네릭의 타입과 다형성, Iterator<E>, HashMap<K,V>, 제한된 제네릭 클래스 (0) | 2023.01.15 |