MapleStory Cookie With Halo

☕ JAVA/☕ 개념지식

[JAVA]@Annotation 종류와 사용법

뉴이 NUEY 2024. 11. 29. 02:23
반응형

 

 

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

 

 이전에는 코드에 대한 설명을 따로 문서파일로 만들었었다. 코드를 변경할 때마다 문서는 수정하지 않으면서 내용의 불일치가 생겼다. 그래서 문서에 적던 내용을 코드에 적기 시작한 게 바로 어노테이션이다.

 

표준 어노테이션 설명
@Override  컴파일러에게 오버라이딩하는 메서드라는 것을 알린다.
@Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.
@SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해준다.(JDK1.7)
@FunctionalInterface 함수형 인터페이스라는 것을 알린다.(JDK1.8)
@Native native메서드에서 참조되는 상수 앞에 붙인다.(JDK1.8)

 


표준 어노테이션

 

@Override
: 오버라이딩 표기.

오버라이딩을 했을 때 메서드명을 잘못 적어도 오류가 뜨지 않았다.
어노테이션을 사용하면 잘못되었다고 컴파일 에러 표시가 뜬다.

 


 

@Deprecated
: 사용하지 않을 것을 권장.

  • 새로운 버전에 업그레이드 된 메서드가 있으므로 사용하지 않을 것을 권장하고있다.
  • 이전 버전을 사용하고 있는 코드를 위해 삭제하지 않았을 뿐.

 


 

@FunctionalInterface
: 함수형 인터페이스에 붙인다.

잘못된 함수형 인터페이스임에도 에러표기가 없다.
@FunctionalInterface를 사용하면 컴파일러가 오류를 체크해준다.

  • 함수형 인터페이스는 하나의  추상메서드만 가져야 하는 제약이 있다.
  • @FunctionalInterface는 이 제약을 지켰는 지 컴파일러가 체크하게 해준다.

 


 

@SuppressWarnings("경고")
: 컴파일러의 경고 메시지가 나타나지 않게 한다.

에러가 아닌 경고 메시지일 경우 안 뜨게 할 수 있다.

 

💡 여러 경고 한번에 안 뜨게 하기 ( { "경고1", "경고2" } )
({ })안에 경고를 묶고 메서드명 위에 적으면 된다.

클래스 전체에 해당 경고 메시지를 안 뜨게 싶게 하고 싶다면 클래스명 위에 적으면 된다.

 


 

메타 어노테이션
Meta Annotation
: 어노테이션을 만들기 위한 어노테이션.
메타 어노테이션 설명
@Target* 어노테이션이 적용가능한 대상을 지정하는데 사용한다.
@Documented * 어노테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited 어노테이션이 자손 클래스에 상속되도록 한다.
@Retention* 어노테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable* 어노테이션을 반복해서 적용할 수 있게 한다.(JDK1.8)

 


 

@Target
: 어노테이션 적용대상을 지정한다.

@SuppressWarnings를 어디에 적용할 수 있는 지 적혀있다.

 


 

@Retention
: 어노테이션 유지(retention)기간을 지정한다.

RUNTIME까지면 프로그램 실행시까지 존재한다.

유지 정책 의미
SOURCE 소스 파일에만 존재. 클래스파일에는 존재하지 않는다.
CLASS 클래스 파일에 존재 실행시에 사용불가. 기본값.
RUNTIME 클래스 파일에 존재 실행시에 사용가능.

 


 

@Documented, @Inherited
: javadoc으로 작성한 문서에 포함시킬 때 사용한다.

  • @Inherited는 자손까지 상속된다.
  • 개발자들이 사용할 일은 별로 없다.

@Repeatable
 반복해서 사용할 수 있는 어노테이션을 정의할 수 있게 해준다.

 

 


참조영상

2024.11.29 - [☕ 자바 JAVA/☕ 클래스와 함수 Class & Method] - [JAVA]@Annotation 만들기

 

반응형