[JAVA 스터디] 12주차 과제 : 애노테이션

2021. 2. 1. 10:33·Live Study
728x90
반응형

목표

자바의 애노테이션에 대해 학습하기

 

스터디 목차

  • 애노테이션 정의하는 방법
  • @retention
  • @target
  • @documented
  • 애노테이션 프로세서

 

1. 애노테이션 정의하는 방법

 

애노테이션(Annotation) 이란?

자바에서 클래스 또는 메서드 앞에 @Override 같은 @ 표시가 애노테이션 이다.

이 애노테이션은 java5 부터 새롭게 추가되었다.

 

이 애노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 된다.

애노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있다.

 

메타 데이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 데이터에 대한 설명을 의미하는 데이터 (자신의 정보를 담고 있는 데이터)

 

애노테이션 정의 방법

public @interface Myannotation{}

 

자바에서 제공하는 애노테이션 (빌트 인 애노테이션)

  • @Override - 메소드가 오버라이드 됐는지 검증한다. 만약 부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류가 난다.
  • @Deprecated - 메소드를 사용하지 말도록 유도한다. 만약 사용한다면 컴파일 경고를 일으킨다.
  • @SuppressWarnings - 컴파일 경고를 무시하도록 한다.
  • @SafeVarargs - 제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시한다. (자바7 이상)
  • @FunctionalInterface - 람다 함수등을 위한 인터페이스를 지정합니다. 메소드가 없거나 두개 이상 되면 컴파일 오류가 난다. (자바 8이상)

 

메타 애노테이션

위에서 본 기본 애노테이션 외에도 메타 애노테이션 들이 있다. 이 메타 애노테이션을 이용해 커스텀 애노테이션을 만들 수 있다.

 

  • @Retention - 애노테이션의 범위라고 할수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.
  • @Target - 애노테이션이 적용할 위치를 결정한다.
  • @Documented - 문서에도 애노테이션의 정보가 표현된다.
  • @Inherited - 이 애노테이션을 선언하면 부모클래스에서 애노테이션을 상속받을 수 있다.
  • @Repeatable - 반복적으로 애노테이션을 선언할 수 있게 한다.

 

커스텀 애노테이션 선언 방법

import java.lang.annotation.*;

@Ingerited
@Documented
@Retention(RetentionPolicy.RUNTIME) // 컴파일 이후에도 JVM에 의해서 참조가 가능하다.
@Target(ElementType.PACKAGE) // 패키지 선언시
public @interface My Annotation {
   ...
   ...
 }

 

 

 

2. @retention

 

애노테이션의 범위라고 할 수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.

 

@Retention(SOURCE) 애노테이션이 소스 코드에만 이용 가능하며 컴파일 후에는 사라진다.
@Retention(CLASS) 애노테이션이 .class 파일에 존재하지만 런타임에는 사라짐
@Retention(RUNTIME) 애노테이션이 컴파일러와 런타임에 사용 가능

 

 

 

3. @Target

 

애노테이션이 적용할 위치를 결정한다.

 

@Target(ElementType.TYPE) 클래스의 어떤 요소에나 적용 가능, 기본값
@Target(ElementType.FIELD) 클래스의 특정 필드
@Target(ElementType.METHOD) 클래스의 메서드
@Target(ElementType.PARAMETER) 메서드의 피라미터
@Target(ElementType.CONSTRUCTOR) 생성자
@Target(ElementType.LOCAL_VARIABLE) 로컬 변수
@Target(ElementType.ANNOTATION_TYPE) 애노테이션 타입

 

 

 

4. @documened

 

documened 애노테이션을 사용한뒤 내가 java doc 문서 만들면 @documened가 붙은 애노테이션이 문서에 표기된다.

 

intelliJ 에서 javaDoc 만드는 방법

 

 

 

5. 애노테이션 프로세서

 

annotation processor는 자바 컴파일러 플러그인의 일종으로, 애노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다.

애노테이션을 사용하기 위해서는 애노테이션 프로세서가 필요하다.

 

  • 애노테이션 프로세서를 사용한다는 것을 자바 컴파일러가 알고 있는 상태에서 컴파일을 수행한다.
  • 애노테이션 프로세서들이 각자의 역할에 맞게 구현되어 있는 상태에서 실행되지 않은 애노테이션 프로세서를 실행한다.
  • 애노테이션 프로세서 내부에서 애노테이션에 대한 처리를 한다.
  • 자바 컴파일러가 모든 애노테이션 프로세서가 실행 되었는지 검사하고, 모든 애노테이션 프로세서가 실행되지 않았다면 반복한다.

 

 

 

 

 

Reference


hilucky.tistory.com/280

 

[Java] Meta Annotation 메타 어노테이션

메타 어노테이션이란 Java5에 추가된 기능으로 어노테이션을 선언할 때 사용하는 어노테이션 종류 @Target @Retention @Inherited 1. @Target 어노테이션을 어떤 요소에 적용할지 지정 @Target(ElementType.TYPE)..

hilucky.tistory.com

jdm.kr/blog/216

 

자바 어노테이션(Java Annotations) :: JDM's Blog

Annotation 어노테이션Annontion은 잘만 쓰면 정말 유용한 자바의 구문입니다. 기본적인 종류는 몇가지에 한정 되지만 본인의 입맛대로 커스텀 어노테이션Custom Annotation도 만들어낼 수 있습니다. 따라

jdm.kr

elfinlas.github.io/2017/12/14/java-annotation/

 

Java에서 어노테이션(Annotation)이란?

Java에서 어노테이션(Annotation) 이란?자바 개발을 하다 보면 클래스 또는 메서드 또는 변수 앞에 @Override 같은 @ 표시를 많이 봤을 것입니다.이 어노테이션은 JEE5(Java Platform, Enterprise Edition 5)부터 새

elfinlas.github.io

im-recording-of-sw-studies.tistory.com/37

 

annotation processor 란

annotation processor는 자바 컴파일러 플러그인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다. 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다. 동

im-recording-of-sw-studies.tistory.com

 

반응형
저작자표시 (새창열림)

'Live Study' 카테고리의 다른 글

[JAVA 스터디] 14주차 과제 : 제네릭  (0) 2021.02.24
[JAVA 스터디] 13주차 과제 : I/O  (0) 2021.02.08
[JAVA 스터디] 11주차 과제 : Enum  (0) 2021.01.25
[JAVA 스터디] 10주차 과제 : 멀티쓰레드 프로그래밍  (0) 2021.01.19
[JAVA 스터디] 9주차 과제 : 예외 처리  (0) 2021.01.11
'Live Study' 카테고리의 다른 글
  • [JAVA 스터디] 14주차 과제 : 제네릭
  • [JAVA 스터디] 13주차 과제 : I/O
  • [JAVA 스터디] 11주차 과제 : Enum
  • [JAVA 스터디] 10주차 과제 : 멀티쓰레드 프로그래밍
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196)
      • study (1)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    미니프로젝트
    SFlash
    알고리즘
    그리디
    spring
    orm
    스파르타코딩클럽
    프로그래머스
    코딩테스트
    카카오코딩테스트
    에러
    항해99
    java
    실전프로젝트
    후기
    버그
    인프런
    해결
    백준
    괄호
    조합
    김영한
    SpringBoot
    파이썬
    카카오인턴
    jpa
    항해마켓
    정리
    회고
    브루트포스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[JAVA 스터디] 12주차 과제 : 애노테이션
상단으로

티스토리툴바