1. 어노테이션이란?
먼저 어노테이션을 설명하기 전에 메타데이터에 대해 조금 알고 가야할 것 같다.
- 메타데이터(Metatdata)란?
- 데이터의 대한 속성 정보이다. '데이터에 관한 구조화 된 데이터', '다른 데이터를 설명해 주는 데이터'라고도한다.
- 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여 되는 데이터라고 한다.
- 어노테이션이란?
- 메타데이터의 일종이다.
- 프로그램을 처리할 때 실행 과정에서 어떻게 데이터를 처리할지 알려주는 서브 데이터라고 한다.
- 코드에서 @를 붙여 사용하는 코드
- JDK 1.5버전 이상부터 사용가능
2. 어노테이션을 사용하는 이유 (효과) 는 무엇일까?
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공해준다.
- 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공해준다.
- 런타임 시 특정 기능을 실행하도록 정보를 제공해준다.
위와 같은 이유에서 사용한다. 그럼 어노테이션의 종류는 무엇이 있을까?
@Override
컴파일러에게 오버라이딩 하라는 메소드라고 알려준다.
@Service
스프링프레임 워크에서 자주 쓰이는 어노테이션으로 핵심 비즈니스 로직을 담은 서비스를 클래스 빈에 등록하기 위해 사용한다.
@SpringBootApplication
스프링 실행 시 필요한 다양한 설정을 알아서 자동으로 해준다.
@GetMapping
스프링 프레임워크에서 자주 쓰이는 어노테이션으로 Http get요청이 오면 @GetMapping이 붙은 메소드가 실행된다.
위와 같이 많은 어노테이션이 있고 상황에 따라 알맞은 어노테이션을 사용하면 된다.
3. 나만의 어노테이션은 어떻게 만들 수 있을까?
1. 어노테이션 생성
어노테이션은 인터페이스 앞에 @를 붙여 만들 수 있다.
public @interface MakeAnnotaion {
}
2. 메타 어노테이션
메타 어노테이션에는 아래와 같은 종류가 있다.
@Target : 사용할 어노테이션에 적용할 대상을 지정하는데 사용한다.
ElementType.ANNOTATION_TYPE | 어노테이션 |
ElementType.CONSTRUCTOR | 생성자 |
ElementType.FIELD | 멤버변수, Enum 상수 |
ElementType.LOCALVARIABLE | 지역변수 |
ElementType.METHOD | 메서드 |
ElementType.PACKAGE | 패키지 |
ElementType.PARAMETER | 매개변수 |
ElementType.TYPE | 타입(클래스, 인터페이스, Enum) |
ElementType.TYPE_PARAMETER | 타입 매개변수(제네릭과 같은 매개변수) |
ElementType.TYPE_USE | 타입이 사용되는 모든 대상 |
@Documented : 어노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 하는 어노테이션이다.
자바에서 제공하는 표준 어노테이션과 메타 어노테이션 중에 @Override와 @SuppressWarnings 어노테이션을 제외하고 모든 어노테이션에 @Documented 어노테이션이 적용되어 있다.
@Inherited : 하위 클래스가 어노테이션을 상속받도록 한다.
상위 클래스에 @Inherited를 붙이면 하위 클래스에서도 동일하게 사용된다.
@Retention : 어노테이션의 지속 시간을 결정하는 데 사용한다.
RetentionPolicy.SOURCE | 컴파일 전까지 지속됨, 컴파일 이후엔 사라진다. |
RetentionPolicy.CLASS | 런타임이 실행되기 전까지만 존재한다. |
RetentionPolicy.RUNTIME |
런타임 시 사용되된다. (즉, 클래스 파일까지 존재하며 실행시 사용된다.) |
@Repeatable : 어노테이션을 반복하여 사용할 수 있도록 허용하는 어노테이션이다.
@Retention(RetentionPolicy.RUNTIME) // 어노테이션은 특정 어노테이션의 지속 시간을 결정하는 데 사용
@Inherited // 하위 클래스가 어노테이션을 상속받도록 함
@Documented // 어노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함
@Target(ElementType.METHOD)// 사용할 어노테이션을 적용할 대상을 지정
public @interface MakeAnnotaion {
}
위의 코드는 컴파일 이후에도 사용할 수 있는 @Retention(RetentionPolicy.RUNTIME) 사용하였고, 하위 클래스에서 어노테이션을 상송 받을 수 있도록 하였다. 또, @Documented를 사용하여 해당 어노테이션에 대한 정보가 문서로 저장될 수 있도록 하였고, 메서드 선언 시 적용할 수 있도록 @Target(ElementType.METHOD)를 사용하였다.
위와 같이 필요한 어노테이션을 상황에 맞게 적용하여 만들면 된다.
출처 - https://ittrue.tistory.com/160
3. 만든 어노테이션 사용하기
@MakeAnnotation(name = "HelloController")
@RequestMapping("/hello")
public class HelloController {
}
public class HelloController2 {
@MakeAnnotation
String str = null;
@MakeAnnotation
public void test(){
}
}
위와 같이 만든 어노테이션을 적용할 수 있다.
[느낀점]
어노테이션에 대해 궁금해 하지 않았는데 이번 기회로 어노테이션이 어떤건지 알 수 있게 되었다.
커스텀 어노테이션도 구현하는 것이 마냥 어렵다고 느꼈는데 각각 어떤 기능을 하는지 어디에 필요한지 정리하면 생각보다 쉽게 커스텀 어노테이션 구현이 가능하다는 것을 알게 되었다.
조금 더 공부해서 직접 어노테이션을 만들어 프로젝트에도 한번 적용해보아야겠다.😁
강의 링크 👉 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
'개발 > 인프런 워밍업 스터디' 카테고리의 다른 글
[인프런 워밍업 클럽 0기 BE] 5일차 - 클린 코드(Clean Code) (0) | 2024.02.23 |
---|---|
[인프런 워밍업 클럽 0기 BE] 4일차 - 추가적인 API 만들기 (0) | 2024.02.22 |
[인프런 워밍업 클럽 0기 BE] 3일차 - 람다(Lambda) (0) | 2024.02.21 |
[인프런 워밍업 클럽 0기 BE] 2일차 - API 만들기 (0) | 2024.02.20 |
[인프런 워밍업 클럽 0기 BE] 0일차 - 시작!! (0) | 2024.02.19 |