21.01.20-41일차
5756 단어 애너테이션annotationannotation
🛵 애너테이션(annotation)
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공
- 애너테이션의 사용예
@Test // 이 메서드가 테스트 대상임을 테스트 프로그램에게 알린다 public void method(){ ... }
🏍 표준 애너테이션
- java에서 제공하는 애너테이션
🛴 @Override
- 오버라이딩을 올바르게 했는지 컴파일러가 체크
- 오버라이딩할 때 메서드이름을 잘못 적는 실수를 하는 경우 많음
class Parent{ void parentMethod() { } } class Child extends Parent{ void parentmethod() { } // 오버라이딩하려 했으나 실수로 이름을 잘못적음 }
- 오버라이딩할 때는 메서드 선언부 앞에 @Override를 붙이자
🛴 @Deprecated
- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙임
- @Deprecated의 사용 예, Date클래스의 getDate()
@Deprecated public int getDate() { return normalize().getDayOfMonth(); }
- @Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 나타나는 메시지
🛴 @FunctionalInterface
- 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크
- 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있음
@FunctionalInterface public interface Runnable{ public abstract void run(); // 추상 메서드 }
🛴 @SuppressWarnings
- 컴파일러의 경고메시지가 나타나지 않게 억제
- 괄호() 안에 억제하고자하는 경고의 종류는 문자열로 지정
@SuppressWarnings("unchecked") // 지네릭스와 관련된 경고를 억제 ArrayList list = new ArrayList(); // 지네릭 타입을 지정하지 않았음 list.add(obj); // 여기서 경고가 발생
- 둘 이상의 경고를 동시에 억제하려면
@SuppressWarnings({"unchecked", "deprecation", "varargs"})
- '-Xlint'옵션으로 컴파일하면, 경고메시지를 확인할 수 있다
괄호[]안이 경고의 종류. 아래의 경우 rawtypes
🏍 메타 애너테이션
- 애너테이션을 위한 애너테이션. 애너테이션을 만들때 사용
- 메타 애너테이션은 java.lang.annotatoin패키지에 포함
🛴 @Target
- 애너테이션을 정의할 때, 적용대상 지정에 사용
@Target ({ TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
🛴 @Retention
- 애너테이션이 유지되는 기간을 지정하는데 사용
- 컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE이다.
- 실행시에 사용 가능한 애너테이션의 정책은 RUNTIME이다.
🛴 @Documented, @Inherited
- javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다
- 애너테이션을 자손 클래스에 상속하고자할 때, @Inherited를 붙인다.
🛴 @Repeatable
- 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
- @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있다
- @Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야함
🏍 애너테이션 타입 정의하기
- 애너테이션을 직접 만들어 쓸 수 있다
@interface 애너테이션이름{ 타입 요소이름(); // 애너테이션의 요소를 선언 ... }
- 애너테이션의 메서드는 추상 메서드이며, 애너테이션을 적용할 때 지정(순서X)
🏍 애너테이션의 요소
- 적용시 값을 지정하지 않으면, 사용될 수 있는 기본값 지정 가능(null제외)
@interface TestInfo{ int count() default 1; // 기본값을 1로 지정 } @TestInfo // @TestInfo(count=1)과 동일 public class NewClass{...}
- 요소가 하나이고 이름이 value일 때는 요소의 이름 생략가능
@interface TestInfo{ String value(); } @TestInfo("passed") // @TestInfo(value="passed")와 동일 public class NewClass{...}
- 요소의 타입이 배열인 경우, 괄호{}를 사용
@interface TestInfo{ String[] testTools(); } . @Test(testTools={"JUnit", "AutoTester"}) @Test(testTools="JUnit") @Test(testTools={}) // 값이 없을때는 괄호{}가 반드시 필요
🏍 모든 애너테이션의 조상
- java.lang.annotation.Annotation
- Annotation은 모든 애너테이션의 조상이지만 상속은 불가
@interface TestInfo extends Annotation{ // 에러. 허용되지 않는 표현 .. }
- 사실 Annotation은 인터페이스 이다
🏍 마커 애너테이션 (Marker Annotation)
- 요소가 하나도 정의되지 않은 애너테이션
🏍 애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class(설계도 객체)만 허용됨
- 괄호()안에 매개변수를 선언X
- 예외 선언X
- 요소를 타입 매개변수로 정의X
🛴 출처
자바의 정석 책 & 유튜브
Author And Source
이 문제에 관하여(21.01.20-41일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ham6482/21.01.20-41일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)