티스토리 뷰
annotation이란
- 주석이라는 뜻으로, 코드에 다른 프로그램을 위한 미리 약속된 형식으로 포함
- 즉 다른 프로그램을 위한 메타 데이터
- 프로그래밍 언어에 영향이 없다.
- 다른 프로그램에 유용한 정보를 제공한다.
- 자바 5부터 제공
annotation 예시 - @Override
- @Override는 컴파일러에게 부모 클래스의 메서드를 오버라이드 했다는 것을 알려준다.
- 그렇기 때문에 실행 전 오류를 알 수 있다.
- 또한 코드에서 명시적으로 상속 메서드가 무엇인지 쉽게 파악할 수 있다.
public class Parent {
public int calculate(int a, int b) {
return a + b;
}
}
public class Child extends Parent {
@Override
public int calculate(int a) {
return a;
}
}
오버라이드 calculate의 매개변수를 하나 제거하면 Override에 빨간줄이 생겨 실행 전에 오류를 발견할 수 있다.
게다가 이 예제에서 @Override가 없다면 오버로딩으로 의도치 않게 사용될 수 있다.
어노테이션 종류
1. 표준 어노테이션
- @Override
- 컴파일러에게 오버라이딩하는 메서드임을 알림
- @Deprecated
- 앞으로 사용하지 않을 것을 권장
- 기존 기능이 대체되거나 개선된 기능이 추가될 때, 기존 기능을 삭제하기보단 해당 어노테이션을 이용
- @SuppressWarnings
- 컴파일러의 경고 메시지가 나타나지 않게 한다.
- 경고 메시지는 deprecation, unchecked, rawtypes, varargs 등 있다.
- deprecation은 Deprecated 로 인해 발생하는 경고를 제외
- unchecked는 제네릭으로 타입을 지정하지 않았을 때 발생하는 경고를 제외
- rawtypes는 제네릭을 사용하지 않아 발생하는 경고를 제외
- varargs는 가변인자의 타입이 제네릭 타입일 때 발생하는 경고를 제외
- 이 외에도 다양한 경고 메시지들이 있다.
- 경고는 안정성이 확실할 때만 사용하는 것이 좋다. 예를들어 unchecked 사용 시 왜 형 안전성을 위반하지 않는지 밝히는 주석을 추가해야 한다.
2. 메타 어노테이션
- 어노테이션에 붙이는 어노테이션
- 어노테이션을 정의할 때, 적용대상(target)이나 유지기간(retention) 등 지정하는데 사용
- @Target
- 어노테이션의 적용가능한 대상을 지정
- 종류
- ElementType.PACKAGE : 패키지 선언
- ElementType.TYPE : 타입 선언
- ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
- ElementType.CONSTRUCTOR : 생성자 선언
- ElementType.FIELD : 멤버 변수 선언
- ElementType.LOCAL_VARIABLE : 지역 변수 선언
- ElementType.METHOD : 메서드 선언
- ElementType.PARAMETER : 전달인자 선언
- ElementType.TYPE_PARAMETER : 전달인자 타입 선언
- ElementType.TYPE_USE : 타입 선언
- @Retention
- 어노테이션이 유지되는 기간 지정
- 유지 정책
- RetentionPolicy.SOURCE
- 소스 파일에만 존재
- @Override 과 같은 컴파일러가 사용하는 어노테이션
- RetentionPolicy.CLASS
- 클래스 파일에 존재
- 런타임 시 사용불가. JVM에 로딩될 때 해당 어노테이션은 무시됨
- 디폴트 값
- RetentionPolicy.RUNTIME
- 클래스 파일에 존재
- 런타임 시 사용가능
- 리플렉션을 통해 클래스 파일에 저장된 어노테이션 정보를 읽어 처리할 수 있다.
- RetentionPolicy.SOURCE
- @Inherited
- 어노테이션의 상속을 가능하게 한다.
'Java' 카테고리의 다른 글
HashMap (0) | 2024.03.28 |
---|---|
java int를 char로 형변환하기 (0) | 2023.02.11 |
static, final, static final 특징 (0) | 2022.08.20 |
PATH, CLASSPATH, BUILDPATH에 대해 (0) | 2021.12.29 |
[Java] 예외 처리 - custom exception (0) | 2021.09.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오블완
- 카카오 2020 공채
- programmers
- 프로그래머스
- 투포인터
- 17779
- 주사위 윷놀이
- 단체사진 찍기
- 티스토리챌린지
- 가장 큰 정사각형 찾기
- 정수 내림차순으로 배치하기
- 자바
- 라면공장
- 2019 카카오 공채
- java
- 3954
- 백준
- DP
- Brainf**k 인터프리터
- 짝지어 제거하기
- 문자열을 정수로 바꾸기
- 2018 카카오 공채
- 카카오2020 공채
- 후보키
- 찾아라 프로그래밍 마에스터
- 게리맨더링 2
- 괄호 변환
- 124 나라의 숫자
- 큰 수 만들기
- 17825
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함