어노테이션이란?
Java에서 어노테이션(annotation)은 코드에 @ 기호로 붙여서 메타데이터(metadata)를 제공하는 문법입니다. 쉽게 말해, 코드에 부가 정보를 알려주는 표식이라고 보면 됩니다.
컴파일러, 개발 도구, 프레임워크 등에 정보를 제공하기 위한 "지시문" 같은 역할을 합니다.
직접 실행되는 코드는 아니지만, 코드에 의미를 추가하거나 동작을 제어할 수 있게 해줍니다.
두 가지의 주요 역할이 있다고 보면 되는데,
1. 컴파일러나 JVM이 어노테이션을 인식하고 처리
자바의 일부 어노테이션은 컴파일러나 JVM이 읽고 특정 동작을 자동으로 수행하도록 합니다.
예를 들어,
- @Override: 이 어노테이션은 컴파일러에게 해당 메서드가 부모 클래스에서 상속받은 메서드를 오버라이드한 것임을 알려줍니다. 잘못 오버라이딩하면 컴파일 에러가 발생합니다.
- @Deprecated: 이 어노테이션은 메서드나 클래스를 더 이상 사용하지 말라고 경고하는 역할을 합니다. 컴파일러나 IDE가 이 어노테이션을 보고 경고 메시지를 표시합니다.
2. 프레임워크나 라이브러리가 어노테이션을 읽고 동작을 결정
많은 프레임워크는 어노테이션을 메타데이터로 사용하여, 프로그램이 실행될 때 동작을 제어합니다.
예를 들어,
- Spring Framework에서 @Autowired 어노테이션은 의존성 주입을 처리하는 데 사용됩니다. @Autowired가 붙은 변수나 메서드를 찾아서 자동으로 객체를 주입합니다.
- JPA에서 @Entity 어노테이션은 해당 클래스가 데이터베이스의 테이블과 매핑된 엔티티임을 나타냅니다. JPA는 이 어노테이션을 통해 해당 클래스를 데이터베이스 테이블로 변환합니다.
자바에서 어노테이션을 어떻게 인식할까?
어노테이션 자체는 실행되는 코드가 아니기 때문에 직접적인 동작을 하지 않지만, 이를 읽고 처리하는 메타프로그래밍 도구(예: 리플렉션, 프레임워크)가 존재합니다.
즉, 어노테이션을 사용한 코드를 프레임워크나 라이브러리가 해석하여 특정 기능을 수행하도록 합니다.
@Component
public class MyService {
@Autowired
private MyRepository myRepository;
}
위의 코드는 예시로 Spring에서 @Autowired 어노테이션을 사용하는 겁니다.
@Autowired가 붙은 필드는 Spring의 의존성 주입(DI) 기능에 의해 자동으로 값을 주입받습니다.
Spring은 프로그램이 실행될 때 리플렉션을 사용해서 @Autowired 어노테이션이 붙은 필드를 찾아, 이를 자동으로 연결하고 값도 주입합니다.
@Entity
public class User {
@Id
private Long id;
private String name;
}
위의 코드는 JPA에서 @Entity 어노테이션을 사용하는 코드입니다.
@Entity는 JPA에서 해당 클래스가 데이터베이스 테이블과 매핑되도록 합니다.
JPA는 이 어노테이션을 보고 해당 클래스와 연결된 테이블을 자동으로 생성하거나 조회하는 작업을 수행합니다.
어노테이션은 단순히 사람이 이해하기 쉽도록 작성하는 주석의 역할을 넘어서서, 컴파일러나 프레임워크가 인식하고 동작을 변경할 수 있는 메타데이터로 사용됩니다. 그래서 어노테이션이 코드에 포함되어 있으면, 이를 적절한 툴이나 프레임워크가 읽고 처리하여 자동화된 동작을 할 수 있습니다.
'JAVA' 카테고리의 다른 글
| POJO (4) | 2025.05.21 |
|---|---|
| JAVA 깊은 복제와 얕은 복제 (1) | 2025.04.28 |
| 자바의 제네릭에 대하여 (3) | 2025.04.23 |
| 자바 인터페이스 (6) | 2025.04.22 |
| 자바 오버로딩 , 오버라이딩 (2) | 2025.04.18 |