목차
- 애노테이션은 무엇인가?
- 표준 애노테이션
애노테이션은 무엇인가?
애노테이션은 용도가 있는 주석이자, 인터페이스입니다.
public interface Annotation {
boolean equals(Object obj);
int hashCode();
String toString();
Class<? extends Annotation> annotationType();
}
1. 애노테이션 용도
- 컴파일, 런타임 단계에서 특정 정보 및 기능 제공
- 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 하는 정보 제공
2. 애노테이션을 사용하는 이유
현재 애노테이션이 수행하는 많은 기능들은 XML을 통해 해결했다고 합니다. 그 예로 설정 정보가 있습니다.
스프링 프레임워크를 사용하다 보면 @Configuration 을 통해 app의 설정 정보를 구성합니다. 하지만 과거에는 이를 XML에 담았다고 합니다. XML은 애노테이션과 다르게 소스코드와 분리되어 있어 초기에는 유지보수성 및 작은 프로젝트에서 명확하게 설정 정보를 볼 수 있는 장점이 있었다고 합니다. 하지만 IT의 발전으로 프로젝트가 커질수록 그 단점이 드러났다고 합니다.
검색해서 찾아본 단점들입니다.
- 소스 코드 외부에서 설정 정보를 관리해야 한다는 불편
- 규모가 커지면서 유연한 유지보수를 위해 등장한 XML이 오히려 유지보수가 힘들어지게하는 불편
- 동일한 프로젝트를 진행해야되는 모든 사람이 XML을 공유해야 되기 때문에 공유로 인한 수정에 대한 불편
표준 애노테이션
자바 진영에서 제공하는 애노테이션을 의미합니다.
대부분 컴파일러에게 어떠한 정보를 제공하도록 하는 애노테이션이 많습니다.
@Override
오버라이딩을 올바르게 했는지 컴파일러가 체크하도록 합니다.
오버라이딩을 하기 위해서는 몇 가지 조건이 필요합니다. @Override는 이를 만족하지 않을 시 컴파일 단계에서 오류를 잡아줍니다. 컴파일 오류가 최고입니다.
아래는 메서드명이 comPare (compare이 올바름)로 작성해서 컴파일 시 오류가 발생하게 됩니다.
@Override를 사용하지 않으면 프로그래머의 실수 등으로 인해 오버라이딩을 사용하려던 의도와 다르게 동작할 수 있습니다. 그리고 그 실수를 컴파일 단계에서 발견하지 못 할 수도 있습니다.
@Deprecated
앞으로 사용하지 않을 것을 권장하는 필드, 메서드임을 알립니다. 사용 금지를 의미하는 것은 아닙니다.
@Functionallnterface
함수형 인터페이스의 형식을 올바르게 작성했는지 컴파일러가 체크하도록 합니다.
함수형 인터페이스는 하나의 추상 메서드만 존재해야 합니다.
다음 시간에는 메타 애노테이션과 애노테이션의 동작 원리에 대해 포스팅하겠습니다.
'Java' 카테고리의 다른 글
자바 - 람다식 (0) | 2022.11.26 |
---|---|
자바 - 제네릭 (0) | 2022.11.26 |
기본형과 참조형 그리고 래퍼클래스 (0) | 2022.07.17 |
this는 왜 사용할까? (0) | 2022.07.15 |
Comparator - Compare() 궁금증 정리 (0) | 2022.07.14 |