[Java] 애너테이션

·2022년 9월 15일
0

Java

목록 보기
9/14
post-thumbnail

에너테이션(Annotation)

  • java.lang.annotation 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다.

Comment VS Annotation

주석 : 어떤 것의 정보를 제공하는 역할

둘은 정보를 전달받는 대상이 누구인가에 대한 차이점을 가지고 있다.

  • Comment : 코드를 읽는 '사람'에게 정보를 제공
  • Annotation : 코드를 사용하는 '프로그램'에게 정보를 전달

에너테이션의 용도

  1. 컴파일러에게 문법 에러를 체크하도록 정보를 제공
  2. 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공
  3. 런타임에 특정 기능을 실행하도록 정보를 제공
@Test // 아래 메서드가 테스트 대상임을 테스트 프로그램에게 알리는 애너테이션
public void run() {...생략...}

public void stop() {...생략...}

// run()메서드는 @Test라는 애너테이션의 영향을 받지만 stop()은 영향을 받지 않는다.

에너테이션은 해당 주석이 가르키는 프로그램 외의 다른 프로그램에게는 영향을 주지 않는다.

에너테이션의 종류

  1. 표준 에너테이션 : 자바에서 기본적으로 제공
    • 자주 사용하는 표준 에너테이션
표준 에너테이션설명
@Override컴파일러에게 메서드를 오버라이딩하는 것이라고 알림
@Deprecated앞으로 사용하지 않을 대상을 알릴 때 사용
@FunctionalInterface함수형 인터페이스라는 것을 알림
@SuppressWarning컴파일러가 경고메세지를 나타내지 않음
  1. 메타 에너테이션 : 에너테이션을 정의하는 데 사용(에너테이션의 에너테이션)
    • 자주 사용하는 메타 에너테이션
메타 에너테이션설명
@Target애너테이션을 정의할 때 적용 대상을 지정하는데 사용한다.
@Documented에너테이션 정보를 javadoc으로 작성된 문서를 포함시킨다.
@Inherited에너테이션이 하위 클래스에 상속되도록 한다.
@Retention에너테이션이 유지되는 기간을 정하는데 사용한다.
@Repeatable에너테이션을 반복해서 적용할 수 있게 한다.
  1. 사용자 정의 에너테이션 : 사용자가 직접 정의하는 에너테이션

표준 에너테이션

  • @Override

    • 메서드 앞에만 붙일 수 있다.
    • 선언한 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드라는 것을 컴파일러에게 알려주는 역할
  • @Deprecated

    • 새로운 것으로 대체되었으니 기존의 것을 사용하지 않을 것을 권장하는 의미
  • @SuperessWarnings

    • 컴파일 경고 메세지가 나타나지 않도록 한다.
  • @FunctionalInterface

    • 함수형 인터페이스
    • 단 하나의 추상 메서드만 가지고 있다.
    • 람다식을 사용을 편리하게 하기 위한 애너테이션

메타 에너테이션

  • @Target
    • 애너테이션을 적용할 대상을 지정
@Target({적용할 대상1, 적용할 대상2}) 
  • @Documented

    • javadoc으로 작성한 문서에 포함되도록 하는 애너테이션 설정
  • @Inherited

    • 하위 클래스가 애너테이션을 상속받도록 한다.
  • @Retention

    • 애너테이션의 지속시간을 결정한다.
  • @Repeatable

    • 애너테이션을 여러 번 붙일 수 있도록 허용

벨로그 표 만들기 극악무도함ㅜㅠ

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글