[Java] @ 어노테이션 (Annotation)

smallcherry's techlog·2022년 3월 19일
0

Java

목록 보기
5/10
post-custom-banner

1. 어노테이션이란?

자바에서 어노테이션은 코드를 부연하는 메타데이터이다. 메타데이터란 다른 데이터를 설명하기 위한 데이터를 뜻하는 것으로, 어노테이션은 어떠한 코드에 대해 컴파일러에게 특정 부분을 설명해주는 역할을 한다.

@Override 어노테이션을 예로 들면

@Override
public String toString() {
  return "재정의된 메소드";
}

다음과 같이 메서드에 @Override 어노테이션이 붙었다면 컴파일러에 toString메서드가 오버라이드된 메서드임을 단지 알려주는 역할이다. 어노테이션을 붙이지 않는다고 해서 컴파일에러가 발생하는 것은 아니다. 하지만 어노테이션을 붙임으로써 사용자가 잘못된 오버라이드를 했을 경우 (메서드 명에 오타가 있는 경우 등) 컴파일 에러를 발생시켜 사용자가 이를 고칠 수 있도록 한다.

이처럼 어노테이션은 클래스, 필드, 메서드 등의 코드에 대한 부가설명 및 컴파일단계에서 도움을 주는 역할로 사용한다.

2. 자바 기본 제공 어노테이션의 역할

java.lang패키지에 속하는, 자바에서 기본적으로 제공하는 어노테이션은 아래와 같다.

@Override
상위타입에 정의된 메서드를 제정의했다는 것을 알리기 위해 사용, 잘못된 오버라이드 재정의, 사용의 경우 이를 컴파일 에러로 알려줌

@Deprecated
사용하면 위험한 코드임을 표시하거나 해당 코드보다 개선된 코드가 존재하기 때문에 사용하지 말 것을 알리기 위해 사용, 이 어노테이션이 사용된 메서드를 사용할 경우 컴파일러가 이를 프로그래머에게 알림

@SuppressWarnings
이미 인지한 컴파일러의 경고를 제거하기 위해 사용, 예를 들어 어떤 메서드를 사용할 때 그 코드로 인해 경고 메세지가 나온다면 그런 경고메세지를 가려버리는 역할을 함

@SafeVarargs
자바7부터 추가되었으며, 생성자나 메소드의 가변인자 파라미터가 안전하게 사용된다는 것을 나타내기 위해 사용

@FunctionalInterface
자바8부터 추가되었으며, 인터페이스를 함수형 프로그래밍인 람다 방식으로 사용하기를 추천하는 용도로 사용

자바에 기본으로 제공하는 어노테이션 뿐 아니라 다른 API 라이브러리등을 통해 새롭게 정의된 어노테이션을 사용할 수 도 있고, 사용자가 직접 어노테이션을 정의하여 사용할 수 도 있다.

3. 어노테이션의 형태

어노테이션은 속성 혹은 파라미터와 같이 값을 지정할 수 있는 요소를 가질 수 있다.

예를 들면, 아래와 같이 하나의 요소를 가지거나,

@Entity(tableName = "vehicles")

두 개의 요소를 가지거나,

@Entity(tableName = "vehicles", primaryKey = "id")

요소를 하나만 가지는 경우 요소의 이름을 생략할 수 도 있으며

요소를 하나만 가지는 경우 요소의 이름을 생략할 수 도 있으며

요소를 가지지 않을 수 도 있다.

@Override

4. 어노테이션의 선언 위치

어노테이션은 클래스, 인터페이스, 메서드, 메서드 파라미터, 필드, 지역변수 위에 선할 수 있다.

References

https://hongsii.github.io/2018/12/12/java-annotation/

https://hamait.tistory.com/314

profile
Java Developer
post-custom-banner

0개의 댓글