학습 키워드
- 애너테이션
- 표준 애너테이션, 메타 애너테이션
- 사용자 정의 애너테이션
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 |