[Java-Effective] Annotation

hyoreal·2022년 8월 31일
0

[JAVA]

목록 보기
6/11
post-thumbnail

Annotaion

  • 애너테이션 (Annotation)

    • 다른 프로그램에게 유용한 정보를 제공하는 역할
    • 다른 프로그램들에게는 아무 영향을 주지 않는다
  • 애너테이션 주요 역할

    • 컴파일러에게 문법에러를 체크하도록 정보 제공
    • 프로그램 빌드 시 코드를 자동으로 생성할 수 있도록 정보 제공
    • 런타임 시 특정 기능을 실행하도록 정보 제공
  • 표준 애너테이션 : 자바에서 기본적으로 제공하는 애너테이션

    표준 애너테이션설명
    @Override컴파일러에게 메서드를 오버라이딩한다고 알림
    @Deprecated이제 사용하지 않을 대상을 알림
    @FunctionalInterface함수형 인터페이스라고 알림
    @SuppressWarning경고메세지 생략
  • @Override

    • 메서드 앞에만 붙일 수 있는 애너테이션
    • 상위 클래스의 메서드를 오버라이딩하는 메서드임을 알리는 역할
    • 오타 발생시 에러 방지
  • @Deprecated

    • 더 이상 사용하지 않는 필드, 메서드가 있는 경우 새로운 것으로 대체되었으니 기존의 것을 사용하지 않음을 알림
  • @SuppressWarnings

    • 컴파일 경고 메세지가 나타나지 않도록 해줌
    • 경고가 발생할걸 알면서도 묵인해야하는 경우 사용
    애너테이션설명
    @SuppressWarnings("all")모든 경고 억제
    @SuppressWarnings("deprecation")Deprecated 메서드 사용 시 나오는 경고 억제
    @SuppressWarnings("fallthrough")switch문에서 break 구문이 없을때 경고 억제
    @SuppressWarnings("finally")finally 관련 경고 억제
    @SuppressWarnings("null")null 관련 경고 억제
    @SuppressWarnings("unchecked")검증되지않은 연산자 관련 경고 억제
    @SuppressWarnings("unused")사용하지않는 코드 관련 경고 억제
  • @FunctionalInterface

    • 함수형 인터페이스 선언 시, 함수형 인터페이스가 바르게 선언되었는지 확인
    • 코드 작성 과정 중 실수 방지 위한 확인용 애너테이션
  • 메타 애너테이션(meta-annotation)

    • 애너테이션을 위한 애너테이션
    • 애너테이션 적용대상, 유지기간 등을 정하는데 사용
    메타 애너테이션설명
    @Target애너테이션을 적용할 타겟 지정
    @Documented애너테이션 정보를 javadoc로 작성된 문서에 포함
    @Inherited애너테이션이 하위클래스에 상속되도록
    @Retention애너테이션이 유지기간을 정하는데 사용
    @Repeatable애너테이션을 반복 적용 가능하게 함
  • @Target

    • 애너테이션을 적용할 적용 대상 지정 시 사용
  • @Documented

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

    • 하위클래스가 애너테이션을 상속받도록 함
  • @Rentention

    • 애너테이션의 지속시간 결정
      |유지 정책| 설명|
      |:-:|:-:|
      |SOURCE|소스파일에 존재, 클래스파일에는 존재X|
      |CLASS|클래스파일에 존재, 실행 시 사용불가, 기본값|
      |RUNTIME|클래스 파일에 존재, 실행 시 사용 가능|
  • @Repeatable

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

    • 사용자가 직접 애너테이션을 정의하여 사용하는 것
    • 인터페이스를 정의하는 방법과 비슷
    • 애너테이션은 java.lang.annotation을 상속받기 때문에 다른 클래스나 인터페이스를 상속받을 수 없음
    @interface 애너테이션명 {
      타입_요소명(); // 애너테이션 요소 선언
    }
profile
좌충우돌 코린이 성장기

0개의 댓글