본문 바로가기

Java

애노테이션이란?

목차

  • 애노테이션은 무엇인가?
  • 표준 애노테이션

애노테이션은 무엇인가?

 

애노테이션은 용도가 있는 주석이자, 인터페이스입니다.

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