본문 바로가기
Language/java

[Java] 애너테이션

by gamxong 2022. 8. 2.

1. 애너테이션이란?

 

: 소스코드와 문서를 하나의 파일로 관리하기 위해 주석  '/**~*/' 로 표현

: 소스코드 중에서 특정 메서드만 테스트하기를 원한다면, '@Test'라는 애너테이션을 메서드 앞에 붙인다.

: 프로그램 자체에는 아무런 영향 X

 

 

2. 표준 애너테이션

 

 @override

- 메서드 앞에만 붙일 수 있는 애너테이션으로, 조상의 메서드를 오버라이딩하는 것이라는 걸 컴파일러에게 알려주는 역할

 

 

@Deprecated

- 이 애너테이션이 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않을 것을 권한다는 의미

 

 

@Functionallnterface

- 컴파일러가 '함수형 인터페이스'를 올바르게 선언했는지 확인하고, 잘못된 경우 에러를 발생시킨다.

- 필수는 아니지만, 붙이면 실수를 방지

 

@FunctionalInterface
public interface Runnable {
	public abstract void run();  // 추상메서드
}

 

 

 

@SuppressWarnings

- 컴파일러가 보여주는 경고메세지가 나타나지 않게 억제해준다.

- 묵인해야 하는 경고가 발생하는 대상에 사용

deprecation @Deprecated가 붙은 대상을 사용해서 발생하는 경고를 억제할 때
unchecked 지네릭스로 타입을 지정하지 않았을 때 발생하는 경고를 억제할 때
rawtypes 지네릭스를 사용하지 않아서 발생하는 경고를 억제할 때
varargs 가변인자의 타입이 지네릭 타입일 때 발생하는 경고를 억제할 때

 

둘 이상의 경고를 억제 할 때는 괄호{} 추가

@SuppressWarnings({"deprecation", "unchecked", "varargs"})

 

@SafeVarargs

- 이 메서드의 가변인자는 타입 안정성이 있다고 컴파일러에게 알려 경고 발생 억제

- 메서드를 선언할 때 @SafeVarargs를 붙이면, 이 메서드를 호출하는 곳에서 발생하는 경고도 억제

- static이나 final이 붙은 메서드와 생성자에만 붙일 수 있음 → 오버라이드될 수 있는 메서드에는 사용할 수 없음

- 컴파일 후에도 제거되지 않는 타입을 reifiable타입 / 제거되는 타입을 non-reifiable타입

- 지네릭 타입들은 대부분 non-reifiable타입

 

습관적으로 @SafeVarargs와 @SuppressWarnings("varargs")를 같이 붙이자!

 

 

댓글