애너테이션, 표준애너테이션

BuZZLightyear·2023년 3월 8일
0

정리

목록 보기
33/47

애너테이션

소스 코드가 컴파일되거나 실행될 때에 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해주는 문법 요소

public interface ExampleInterface {

    void example();
}
public class ExampleClass implements ExampleInterface{
    @Override
    public void example() {

    }
}

@Override가 애너테이션이다.
애너테이션은 @로 시작하며, 클래스, 인터페이스, 필드, 메서드 등에 붙여서 사용할 수 있다.
예시에서 @Override는 example()이 추상 메서드를 구현하거나, 상위 클래스의 메서드를 오버라이딩한 메서드라는 것을 컴파일러에게 알려주는 역할이다.
결론 : 애너테이션은 컴파일러 또는 다른 프로그램에게 필요한 정보를 제공해주는 역할을 수행함

애너테이션의 종류

JDK가 기본적으로 제공하는 애너테이션도 있지만, 다른 프로그램에서 제공하는 애너테이션도 있따.

JDK에서 기본적으로 제공하는 애너테이션
1. 표준 애너테이션 : JDK에 내장되어 있는 일반적인 애너테이션
2. 메타 애너테이션 : 다른 애너테이션을 정의할 때 사용하는 애너테이션

표준 애너테이션 - 다른 문법 요소에 붙여서 사용하는 일반적인 애너테이션을 의미
메타 애너테이션 - 애너테이션을 직접 정의해서 사용할 때에 사용하는 애너테이션

사용자 정의 애너테이션 - 사용자가 직접 정의해서 사용하는 애너테이션

표준 애너테이션

@Override - 메서드 앞에만 붙일 수 있는 애너테이션, 선언한 메서드가 상위 클래스의 메서드를 오버라이딩하거나 추상 메서드를 구현하는 메서드라는 것을 컴파일러에게 알려주는 역할을 수행

class SuperClass {
    public void example() {
        System.out.println("example() of SuperClass");
    }
}

class SubClass extends SuperClass {

    @Override
    public void example() {
        System.out.println("example() of SubClass");
    }
}

컴파일 과정에서 컴파일러가 @Override를 발견하면, @Override가 붙은 메서드와 동일한 이름을 가진 메서드가 상위 클래스(또는 인터페이스)에 존재하는지 검사한다.
만약, 상위 클래스(또는 인터페이스)에서 @Override가 붙어있는 메서드명과 동일한 이름의 메서드를 찾을 수 없다면 컴파일러가 컴파일 에러를 발생시킨다.

@Override를 사용하는 이유 - 개발자의 실수로 메서드의 이름을 잘못 입력했을 때 @Override를 붙이지 않으면 컴파일러는 새로운 메서드를 정의하는 것으로 간주하고 에러를 발생 시키지 않음.

@Override는 컴파일러에게 “컴파일러야, 이 메서드는 상위 클래스의 메서드를 오버라이딩하거나 추상 메서드를 구현하는 메서드인데, 만약에 내가 실수해서 오버라이딩 및 구현이 잘 안되면 에러를 발생시켜서 나에게 알려줄래?”라고 부탁하는 것과 같다.

@Deprecated - 기존에 사용하던 기술이 다른 기술로 대체되어 기존 기술을 적용한 코드를 더 이상 사용하지 않도록 유도하는 경우에 사용한다.

public class OldClass {

    @Deprecated
    private int oldField;

    @Deprecated
    int getOldField() {
        return oldField;
    }


}
    public static void main(String[] args) throws IOException {
        OldClass oldClass = new OldClass();
        System.out.println(oldClass.getOldField());

    }


@Deprecated는 애너테이션이 붙은 대상이 새로운 것으로 대체되었으니 기존의 것을 사용하지 않도록 유도하는 기능이다.
결론 : 기존의 코드를 다른 코드와의 호환성 문제로 삭제하기 곤란해 남겨두어야만 하지만 더 이상 사용하는 것을 권장하지 않을 때에 @Deprecated를 사용한다

@SuppressWarnings - 애너테이션은 컴파일 경고 메시지가 나타나지 않도록 한다. 경우에 따라서 경고가 발생할 것이 충분히 예상됨에도 묵인해야 할 때 주로 사용한다.

@SuppressWarnings 뒤에 괄호를 붙이고 그 안에 억제하고자 하는 경고메세지를 지정할 수 있다.

중괄호에 여러 개의 경고 유형을 나열함으로써 여러 개의 경고를 한번에 묵인할수도 있다.

@SuppressWarnings({"deprecation", "unused", "null"})

@FunctionalInterface - 애너테이션은 함수형 인터페이스를 선언할 때, 컴파일러가 함수형 인터페이스의 선언이 바르게 선언되었는지 확인한다. 바르게 선언 안됐을때 에러가 발생한다.

함수형 인터페이스는 단 하나의 추상 메서드만을 가져야하는 제약이 있다.

@FunctionalInterface
public interface ExampleInterface {
	public abstract void example(); // 단 하나의 추상 메서드
}
profile
버즈라이트이어

0개의 댓글