충분히 쌓여가는
Annotation(애너테이션) @ 본문
애너테이션
주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공
애너테이션 사용 예
@Test // 이 메서드가 테스트 대상임을 테스트 프로그램에게 알린다
public void method() {
...
}
표준 애너테이션
애너테이션 | 설명 |
@Override | 컴파일러에게 오버라이딩하는 메서드라는 것을 알린다 |
@Deprecated | 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다 |
@SuppressWarnings | 컴파일러의 특정 경고메시지가 나타나지 않게 해준다 |
@SafeVarargs | 지네릭스 타입의 가변인자에 사용한다 |
@FunctionalInterface | 함수형 인터페이스라는 것을 알린다 |
@Native | native 메서드에서 참조되는 상수 앞에 붙인다 |
@Target* | 애너테이션이 적용가능한 대상을 지정하는데 사용한다 |
@Documented* | 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다 |
@Inherited* | 애너테이션이 자손 클래스에 상속되도록 한다 |
@Retention* | 애너테이션이 유지되는 범위를 지정하는데 사용한다 |
@Repeatable* | 애너테이션을 반복해서 적용할 수 있게 한ㄷ나 |
@Override
오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다
오버라이딩할 때 메서드 이름을 잘못적는 실수를 하는 경우가 많다
// 메서드 이름(M, m)이 다름
class Parent {
void parentMethod() { }
}
class Child extends Parent {
void parentmethod() { } // 오버라이딩하려 했으나 실수로 이름을 잘못적음
}
오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이자
-> 컴파일 할 경우 에러 메시지 생긴다
코드
메서드의 이름을 잘못적음 -> 에러 발생
오버라이드를 제거할 경우
에러 발생하지 않는다
@Deprecated
앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다
@Deprecated의 사용 예, Date 클래스의 getDate()
@Deprecated
public int getDate() {
return normalize().getDayOfMonth();
}
@Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 경고메시지가 나옴
@FunctionalInterface
함수형 인터페이스에 붙이면 컴파일러가 올바르게 작성했는지 체크(@FunctionalInterface 안붙여도 되지만 올바르게 작성했는지 체크)
@FunctionalInterface
public interface Runnable {
public abstract void run(); // 추상 메서드
}
함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있다
@SuppressWarnings
컴파일러의 경고 메세지가 나타나지 않게 억제한다
괄호 안에 억제하고자 하는 경고의 종류를 문자열로 지정
컴파일러가 알려주는 경고를 확인했다는 의미 -> 경고 메세지가 나타나지 않는다
@SuppressWarnings("unchecked") // 지네릭스와 관련된 경로를 억제
ArrayList list = new ArrayList(); // 지네릭 타입<T>을 지정하지 않았음
list.add(obj); // 여기서 경고 발생
둘 이상의 경고를 동시에 억제할 경우
@SuppressWarnings({"deprecation", "unchecked", "varargs"})
'-Xlint' 옵션으로 컴파일 하면, 경고메세지 확인할 수 있다, 괄호[] 안이 경고의 종류
코드
class Parent {
void parentMethod() { }
}
class Child extends Parent {
@Override
@Deprecated
void parentMethod() { }
}
@FunctionalInterface // 함수형 인터페이스는 하나의 추상 메서드만 가능
interface Testable {
void test(); // 추상 메서드
// void check(); // 추상 메서드
}
public class annotationTest {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
Child c = new Child();
c.parentMethod(); // deprecated된 메서드 사용
}
}
'Java > JAVA3' 카테고리의 다른 글
애너테이션 타입 정의하기, 애너테이션의 요소 (0) | 2023.08.01 |
---|---|
메타 애너테이션 (0) | 2023.08.01 |
열거형에 멤버 추가하기 (0) | 2023.07.31 |
열거형(enum) (0) | 2023.07.30 |
지네릭 형변환 (0) | 2023.07.29 |