코드스테이츠_국비교육/[Section1]

18.05_애너테이션_22.09.15

생각없이 해도 생각보다 좋다. 2022. 9. 17. 23:36

학습 키워드

  • 애너테이션
  • 표준 애너테이션, 메타 애너테이션
  • 사용자 정의 애너테이션

Annotation

>의미

: 프로그램 실행에 영향을 끼치지 않는 동시에 정보를 제공하는 역할을 한다.

: 주석과 비슷한 목적성을 띈다. 하지만 정보를 제공하는 대상에 차이가 있다.

>주석(comment)와 애너테이션(annotation)의 차이

주석: 소스 코드를 읽는 사람(개발자)에게 정보를 제공

애너테이션: 특정 코드를 사용하는 프로그램에게 정보를 제공

>용도

컴파일러에게 문법 에러를 체크하도록 정보 제공

프로그램 빌드 시, 코드를 자동으로 생성하도록 정보 제공

런타임에 특정 기능을 실행하도록 정보 제공

>종류

  • 1. 표준 애너테이션

: 자바에서 기본으로 제공하는 애너테이션

  • 2. 메타 애너테이션

: 애너테이션에 붙이는 애너테이션. 즉, 애너테이션을 정의하는 데에 사용되는 애너테이션

  • 3. 사용자 정의 애너테이션

: 사용자가 직접 정의하는 애너테이션

 

>표준 애너테이션

@Override

: 컴파일러에게 해당 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드임을 알릴 때 사용

: 메서드 앞에만 붙일 수 있음.

: @Override와 같은 이름의 메서드가 상위 클래스에 없다면 컴파일 에러 발생

: 미리 실수를 예방하는 느낌. 오버라이딩할 때 꼭 사용하자.

class Super {
void run() {}
}

class Sub extends Super {
@Override
void rnu() {} // 컴파일 에러 발생, 오타가 난 것을 발견할 수 있음.
}

 

@Deprecated

: 하위 버전 호환성 문제로 삭제하긴 곤란하지만 더이상 사용하지 않을 대상을 알릴 때 사용

: 보통 새로운 버전의 JDK가 소개되어 특정 필드나 메서드가 대체되어 사용되지 않을 경우 사용

: @Deprecated가 작성된 코드를 사용하면, 컴파일할 때 알림 메세지 발생

class OldClass {
@Deprecated
int oldField;

@Deprecated
int getOldField() { return oldField; };
//oldField 필드 혹은 getOldField 메서드 사용 시, 컴파일할 때 안내 메세지 출력.
}

 

@SuppressWarning

: 컴파일러가 경고메세지를 나타내지 않게 할 때 사용

: 보통 예상되는 경고가 존재하지만 무시하고 싶을 때 사용

: @SuppressWarning( )의 괄호 안에 억제하고 싶은 경고를 작성함

: ({"A", "B", "C"})와 같이 둘 이상의 경고를 무시할 수도 있음.

<예시>

@SuppressWarings(”all”) : 모든 경고를 억제

@SuppressWarings(”deprecation”) : Deprecated 메서드를 사용한 경우 나오는 경고 억제

@SuppressWarings(”fallthrough”) : switch문에서 break 구문이 없을 때 경고 억제

@SuppressWarings(”finally”) : finally 관련 경고 억제
@SuppressWarings(”null”) : null 관련 경고 억제

@SuppressWarings(”unchecked”) : 검증되지 않은 연산자 관련 경고 억제

@SuppressWarings(”unused”)  : 사용하지 않는 코드 관련 경고 억제


@FunctionalInterface

: 해당 인터페이스가 함수형 인터페이스라는 것을 알릴 때 사용

: FunctionalInterface는 단 하나의 추상 메서드만을 가져야하는 제약이 있다.

: 함수형 인터페이스가 부적절한 메서드를 추가하거나, 다른 인터페이스를 상속받으면 @FunctionalInterface가 에러를 발

생시킨다.

>메타 애너테이션

@Target : 애너테이션을 정의할 때 적용 대상을 지정하는데 사용한다.

@Documented : 애너테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.

@Inherited : 애너테이션이 하위 클래스에 상속되도록 한다.

@Retention : 애너테이션이 유지되는 기간을 정하는데 사용한다.

@Repeatable : 애너테이션을 반복해서 적용할 수 있게 한다.

>사용자 정의 애너테이션

 

 

//우선 컴파일러가 해주니까 이게 무슨 의미일지 코드 분석할 때 알 수 있을 정도로만 파악하자.

'코드스테이츠_국비교육 > [Section1]' 카테고리의 다른 글

19.01_스레드_22.09.16  (0) 2022.09.17
18.06_파일 입출력_22.09.15  (0) 2022.09.17
18.04_메서드 레퍼런스_22.09.15  (0) 2022.09.17
18.03_스트림 메서드_22.09.15  (0) 2022.09.17
18.02_스트림_22.09.15  (0) 2022.09.17