어노테이션이란?
프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 어노테이션은 주석(comment)처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있는 장점이 있다.
표준 어노테이션
자바에서 제공하는 표준 어노테이션으로 *가 붙은 것은 메타 어노테이션이다.
@Override로 예시를 들자면,
- 메서드 앞에만 붙일 수 있는 어노테이션이다.
- 조상의 메서드를 오버라이딩하는 것이라는 걸 컴파일러에게 알려주는 역할을 한다.
- 오버라이딩을 할 때, 어노테이션이 없다면 조상 메서드의 이름을 잘못 써도 컴파일러는 이것이 잘못된 것인지 모른다.
- 게다가 실행 시에도 오류가 발생하지 않고 조상의 메서드가 호출되므로 어디서 잘못되었는지 알아내기 어렵다.
- @Override 어노테이션을 붙이면, 컴파일러가 같은 이름의 메서드가 조상에 있는 확인하고 없으면 에러메세지를 출력한다.
- 어노테이션 붙이는 것이 필수는 아니지만 실수를 미연에 방지해주므로 붙여주는 것이 좋다!
메타 어노테이션
메타 어노테이션은 어노테이션을 위한 어노테이션으로, 어노테이션을 정으할 때 어노테이션의 적용대상(target)이나 유지기간(retention)등을 지정하는데 사용된다.
어노테이션 타입 정의하기
직접 어노테이션을 만들어서 사용할 수 있다. 새로운 어노테이션을 정의하는 방법은 아래와 같다. '@' 기호를 붙이는 것을 제외하면 인터페이스를 정의하는 것과 동일하다.
@interface 어노테이션이름 {
타입 요소이름() // 어노테이션의 요소를 선언한다.
...
}
* '@Override'는 어노테이션이고 'Override'는 어노테이션 타입이다.
- 어노테이션의 요소
- 어노테이션 내에 선언된 메서드를 어노테이션의 요소라고 한다.
- 어노테이션에도 인터페이스처럼 상수를 정의할 수 있지만, 디폴트 메서드는 정의할 수 없다.
- 어노테이션의 요소는 반환값이 있고 매개변수는 없는 추상 메서드의 형태를 가지며, 상속을 통해 구현하지 않아도 된다.
- 어노테이션을 적용할 때 이 요소들의 값을 빠짐없이 지정해주어야 한다.
- 요소의 이름도 같이 적어주므로 순서는 상관없다.
- java.lang.annotation.Annotation
- 모든 어노테이션의 조상은 Annotation이다.
- 어노테이션은 상속이 허용되지 않으므로 명시적으로 Annotation을 조상으로 지정할 수 없다.
- Annotation은 일반적인 인터페이스로 정의되어 있다.
- 모든 어노테이션의 조상인 Annotation인터페이스가 정의되어 있어서, 모든 어노테이션 객체에 대해 equals(), hasgCode(), toString()과 같은 메서드를 호출하는 것이 가능하다.
- 어노테이션의 규칙
- 요소의 타입은 기본형, String, enum, 어노테이션, Class만 허용된다.
- ()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
[참고]
Java의 정석(남궁성 저)
'공부 > 자바' 카테고리의 다른 글
JVM 메모리 구조 (2) | 2024.10.17 |
---|---|
열거형(Enum) (0) | 2024.07.03 |
제네릭스(Generics) (0) | 2024.06.12 |
컬렉션 프레임워크(Collections Framework) (0) | 2024.06.10 |
예외 처리(Exception handling) (0) | 2024.06.04 |