Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Annotation(애너테이션) @ 본문

Java/JAVA3

Annotation(애너테이션) @

빌드이너프 2023. 7. 31. 12:06

애너테이션

주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공

 

애너테이션 사용 예

@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