내일배움캠프 22일차 TIL - Annotation

2024. 5. 19. 22:13·⛺스파르타코딩클럽

240517

오늘의 학습 

    ●  1. Annotation

    ●  2. 리플렉션 개념

    ●  3. Stream & Lambda

 

 

Annotation

애너테이션이란?

자바에서 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공하는 것이 애너테이션이다.

 

메타 애너테이션
메타 애너테이션은 애너테이션을 위한 애너테이션이다.
@Target : 애너테이션이 적용 가능한 대상을 지정하는데 사용한다.
@Documented : 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited : 애너테이션이 자손 클래스에 상속되도록 한다.
@Retention : 애너테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable : 애너테이션을 반복해서 적용할 수 있게 한다.

1. @Target

애너테이션이 적용 가능한 대상을 지정하는데 사용한다.

즉, 애너테이션을 붙힐 수 있는 타겟을 지정하는 것이다. ( 애노테이션을 붙힐 수 있는 범위를 지정! )

ex) @Target({FIELD, TYPE}) 일 경우에는 클래스와 필드에만 애노테이션 @를 붙힐 수 있다는 의미이다.

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
//TYPE : 타입(클래스, 인터페이스, enum), 파라미터, 메서드 생성자 등등
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

// TYPE : 클래스, interface, enum
// FIELD : 필드( 원시타입만 가능한듯 )
// TYPE_USE : 참조 멤버 변수
@Target({TYPE, FIELD, TYPE_USE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation {
}

@MyAnnotation // TYPE
public class MyClass {
	
    @MyAnnotation // FILED
    private int num;
    
    @MyAnnotation // TYPE_USE
    MyClass mc;
}

 

2. @Retention

애너테이션이 유지되는 범위를 지정하는데 사용한다. ( 언제까지 유지되는지 )

SOURCE

소스 파일에만 존재, 컴파일하고 나면 클래스 파일에는 존재하지 않는다.

컴파일이하고 런타임으로 가기전에 사라진다.

CLASS

클래스 로더까지 사용할 수 있으며, 클래스 파일에 존재, 실행시에 사용불가, 기본값이다.

RUNTIME

클래스 파일에 존재하고 실행시 까지 사용이 가능하다. 즉, 런타임까지 존재하는 것이다.

( 클래스 파일에 존재하기 때문에 가능한 것이다. 클래스 파일이 JVM으로 가서 실행되기 때문 )

 

3. @Documented

javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다.

 

4. @Inherited

애너테이션을 자손 클래스에 상속하고자 할 때, @Inherited를 붙이게 된다.

이 애너테이션을 부모 클래스에 붙히게되면 자식클래스는 자바에서 상속을 받을 때 애너테이션도 함께 상속을 받는다.

@Inherited // 상속 
public @interface SuperAnno {
}

@SuperAnno
public class Parent {
}

// 여기에 @SuperAnno이 붙은걸로 인식 마치 자바의 상속과 비슷하다.
// @SuperAnno
public class Child extends Parent {

}

 

5. @Repeatable

반복해서 붙일 수 있는 애너테이션을 정의할 때 사용한다. 사용을 하기 위해선 컨테이너 애너테이션을 정의해야 한다.

// 반복해서 붙일 수 있는 애네터이션을 정의할 때 사용한다.
@Repeatable(ToDos.class)
@interface ToDo {
	String value();
}

// @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있다.
@ToDo("delete test codes.")
@ToDo("override inherited methods")
class MyClass {
	...
}
// @Repeatable인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야한다.
@interface ToDos { // 여러 개의 ToDo애너테이션을 담을 컨테이너 애너테이션 ToDos
	ToDo[] value(); // ToDo애너테이션 배열타입의 요소를 선언, 이름이 반드시 value여야한다.
}

 

6. 애너테이션 타입 정의하기

애너테이션을 직접 만들어 쓸 수 있다.

 

애너테이션의 메서드는 추상 메서드로 선언을 하며, 애너테이션을 적용할 때 지정

애너테이션에서 또 다른 애너테이션 인터페이스를 요소로 정의할 수 있다.

 

애너테이션 인터페이스를 만들때 추상 메서드로 선언이 가능하며, 이 애너테이션을 사용하는 클래스에는 애너테이션을

붙히고 추상 메서드를 애너테이션 매개값으로 넣을 수 있다.

@Target(ElementType.TYPE)
public @interface AnnotationEx2 {
    int count();
    String str();
    String[] strArr();
    Test test();
}

@AnnotationEx2(count=1, 
               str="a", 
               strArr={"a","b","c"},
               test=@Test(str="testA", str2="testB"))
class AnnotationTest {

}

# 오늘의 회고

오늘은 애너테이션을 공부를했고 개인과제 또한 완성을 했다. 스프링과 JPA를 이용하여 개인과제를 진행을 했는데

JPA를 처음 써보는거라 어려웠지만 쓰다보니까 적응이 돼었다.

'⛺스파르타코딩클럽' 카테고리의 다른 글

내일배움캠프 24일차 TIL - Generic Static Method  (1) 2024.05.21
내일배움캠프 23일차 TIL - JVM  (2) 2024.05.20
내일배움캠프 21일차 TIL - Spring(IoC, DI)  (1) 2024.05.16
내일배움캠프 20일차 TIL - Spring(API)  (0) 2024.05.13
내일배움캠프 19일차 TIL - Iterator  (0) 2024.05.12
'⛺스파르타코딩클럽' 카테고리의 다른 글
  • 내일배움캠프 24일차 TIL - Generic Static Method
  • 내일배움캠프 23일차 TIL - JVM
  • 내일배움캠프 21일차 TIL - Spring(IoC, DI)
  • 내일배움캠프 20일차 TIL - Spring(API)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (185)
      • 🎓방송통신대학교 (45)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (12)
        • 🔢자료구조 (7)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🏛️세계의정치와경제 (3)
        • 🖥️컴퓨터과학과 (1)
      • 🛠️Backend (64)
        • 📚백엔드 공부 (4)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (8)
        • ⚡Python (13)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • 📜HTTP (7)
      • 🚀DevOps (1)
      • ⛺스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    C
    Java
    C언어
    C 언어
    유비쿼터스
    자바
    Python
    자료구조
    spring
    입출력
    방송통신대학교
    파이썬
    컴퓨터의 이해
    방통대
    방송대
    컴파일러
    컴퓨터과학 개론
    배열
    유비쿼터스 컴퓨팅개론
    함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
내일배움캠프 22일차 TIL - Annotation
상단으로

티스토리툴바