2024. 4. 29. 23:50ㆍJAVA
어노테이션이란? (Annotation)
: 어노테이션(Annotation)은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용되는 것으로 주석과 같은 의미를 가진다.
-> 자바에서 Annotation(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술
[어노테이션 역할]
- 컴파일러에게 사용하는 정보 제공
- 소프트웨어 개발 툴이 자동으로 코드를 생성할 때 사용하는 정보 제공
- 실행 시 특정 기능을 실행하도록 정보 제공
그렇다면, 어노테이션(Annotation)을 사용하는 이유(효과)는 무엇일까?
1. 생산성이 증가한다.
-> 필요한 메서드를 자동으로 생성하여 입력하는 코드량이 감소한다.
2. 유지보수가 용이하다.
-> 특정 기능의 동작 방식을 변경할 때, 해당 기능과 관련된 어노테이션만 수정함으로 유지보수가 간편하다.
어노테이션(Annotation) 종류 및 사용법
자바에서 제공하는 어노테이션 중 자주 사용하는 것들로만 나열하자면,
@Override
: 메소드 오버라이드로, 메서드의 선언 위에 붙여준다.
상속받은 부모 클래스나 구현해야할 인터페이스에 해당 메서드가 존재하지 않는다면 컴파일 오류가 발생한다.
@Override
public void getMethod() {
System.out.println("get Method");
}
@Deprecated
:메소드 Deprecated로, 이 메서드를 사용하면 앞으로 사용하지 않을 것임으로 사용을 자제해달라는 메시지를 알리고 싶을 때 사용한다.
@Deprecated
public void deprecatedMethod() {
System.out.println("deprecatedMethod")
}
@SuppressWarnings
: 이 어노테이션을 사용하면 컴파일러가 경고 메시지를 나타내지 않도록 한다.
메타 어노테이션(Meta - Annotation) 종류 및 사용법
: 메타 어노테이션은 어노테이션을 붙이는 어노테이션이다.
즉, 사용할 어노테이션을 정의하는데 사용한다.
@Target
: 어노테이션을 정의할 때 적용 대상을 지정하는 데 사용한다.
| value | |
| ElementType.ANNOTATION_TYPE | 어노테이션 |
| ElementType.CONSTRUCTOR | 생성자 |
| ElementType.FIELD | 필드 선언 |
| ElementType.LOCAL_VARIABLE | 로컬 변수 |
| ElementType.METHOD | 메서드 |
| ElementType.PARAMETER | 파라미터 |
| ElementType.PACKAGE | 패키지 |
| ElementType.TYPE | 클래스, 인터페이스, enum |
@Documented
: 자바 문서에 어노테이션 정보가 표시된다.
@Ingerited
: 자식 클래스가 어노테이션 상속을 받을 수 있다.
@Repeatalbe
: 반복적으로 어노테이션을 선언할 수 있다.
커스텀 어노테이션 생성
1. 어노테이션 생성
-> 인터페이스 앞에 @를 붙여서 생성
public @interface TagetAnnotation {
}
2. 메타 어노테이션 추가
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.TYPE)
public @interface TagetAnnotation {
}
3. 변수 추가
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target(ElementType.TYPE)
public @interface TagetAnnotation {
String name();
String value();
}
4. 적용하기
@TagetAnnotation(name = "memberController", value = "memberController")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/list")
public MemberResponse findMember() {
return memberService.getMember();
}
}
'JAVA' 카테고리의 다른 글
| [JAVA] Lambda & Stream(람다와 스트림) 기본 개념 및 사용법 (2) | 2025.07.23 |
|---|---|
| [JAVA] 제네릭(Generic) 개념 (5) | 2025.07.14 |
| [JAVA] 예외(Exception)와 예외처리(try-catch, throw) (1) | 2025.07.10 |
| [JAVA] 자바 인스턴스와 메모리 영역(stack, heap, static) (2) | 2023.11.30 |
| [JAVA] Java 클래스(Class) 기본 개념 정리 (5) | 2023.03.26 |