Annotation
의 사전적 정의는 주석
이다.
우리가 흔히 코드에서 쓰는 주석으로는 //
또는 /* */
로 처리된 문장들을 떠올리게 될 것이다. 그럼 이런 일반적인 주석이 아닌 애노테이션은 왜 필요할까?
애노테이션은 위와 같은 일반 주석처럼 소스코드에 별다른 영향을 미치지 않으면서 다른 프로그램에 정보를 전달하는 역할을 한다.
Kotlin in action에서 알아봤던 예시처럼, @Test
애노테이션을 사용하면 테스트 프레임워크인 JUnit에게 테스트를 할 것을 알리는 것이다.
그래서 이 애노테이션은 일종의 메타데이터
로 여겨진다.
그렇다면 메타데이터는 무엇일까?
메타데이터는 흔히 '데이터에 대한 데이터'로 설명되곤 한다.
이게 무슨 말이냐, 하면... 쉽게 예를 들어보자.
도서관에는 수많은 종류의 책들이 여기저기에 꽂혀있다. 우리는 여기서 원하는 책을 어떻게 찾을 수 있을까?
보통 도서관의 책들은 각 책마다 일종의 일련번호가 함께 부여된다. 인문 서적은 가
구역에, 공학 서적은 바
구역에, ... 이런 식으로 책의 장르가 나뉘어지고, 그 이후에는 또 작가명 기준으로 김
, 이
등이 붙기도 한다. 그렇기에 우리는 수많은 책이 존재하는 도서관에서 내가 원하는 책을 쉽게 찾을 수 있다. 검색 시스템을 이용해 위치를 검색하기도 하고, 아니면 책장에 붙어있는 장르 분류를 보고 직접 찾아보기도 한다.
그리고 이 모든 과정은 바로 일련 번호에 의해 가능해진다. 도서관의
책
이 우리가 사용하고자 하는 진짜데이터
라면, 책마다 붙어있는일련 번호
가 일종의메타데이터
인 셈이다.
또 다른 예시로는 사진을 찍으면 함께 저장되는 위치정보, 카메라 정보 등도 사진이라는 데이터에 대한 메타데이터라고 할 수 있겠다.
이러한 메타데이터의 일종으로 우리는 애노테이션을 쓰는 것이다. 실제 데이터(그러니까 소스코드)를 더 잘 활용하기 위해서 말이다!