Annotation VS Comment

2022년 9월 29일 수정

이 글은 annotation과 comment라는 두 단어를 개인적인 사정으로(?) 비교하는 이상한 글이다.

Annotation과 Comment의 사전적 의미

사실 이 이상한 글을 쓰게 된 계기는 annotation이라는 단어 때문이다. 이 단어의 사전적 의미를 찾아보면 이렇다.

annotation: 주석(을 달기)

annotation의 경우 일반적인 문서나 논문의 보조 설명을 위한 주석 용도로 사용하는 개념 혹은 노트다.

학창 시절 공부하면서 책에 펜으로 보조 설명을 적는다던가, 형광펜으로 뭔가 표시한다던가, 포스트잇 등으로 뭔가를 적어서 붙여 놓는다던가 등이 대표적인 주석의 예라고 볼 수 있다.

여기서 주석이라는 의미를 주목할 수 밖에 없다. 왜냐하면 우리(개발자)들이 흔히 쓰는 주석이라는 단어는 comment이기 때문이다.

comment: 논평, 언급, 지적, 논평하다, 견해를 밝히다

이런… comment 자체에 주석이라는 의미가 없었다니! 하지만 소프트웨어 개발자들은 대체로 코멘트를 주석이라 부르는 것에는 변함은 없는 것 같다.

어쨌든 결과적으로 둘 다 주석이라는 의미가 있다. 그렇다면 이 두 단어의 의미는 같다고도 볼 수 있을까?

그럴리가.

개발자의 Annotation

영어 단어 annotation은 개발 분야에 있어서는 '주석'이라는 의미로는 쓰이지 않는다. 그 보다는 뭔가의 지시어와 비슷한 개념이다. 이 코드는 무슨 역할을 수행한다거나 어떤 특징을 받는다 등의 의미를 가지기도 한다.

많은 언어들에서 비슷비슷한 문법을 예로 들자면 Python의 데코레이터 패턴이 있다. 아래는 대충 만든 데코레이터 패턴을 사용한 예이다.

@some_decorator
def some_function():
    pass

위 코드에서 some_function()some_decorator 의 특징을 받게 된다. 물론 생략된 것이 많긴 한데, 중요한 것은 여기서 저 데코레이터(decorator)를 적는 방식이 일반적으로 annotation이라 불리는 그거다.

이런 문법은 다양한 언어에서 비슷하게 지원하기도 한다. 예를 들자면 Java에서는 Annotation 이라는 문법이 비슷한 모양으로 제공되고, Swift에서는 PropertyWrapper 를 annotation 스타일로 지원한다.

그런데 Python의 경우 아예 annotation 문법이 따로 있기도 하다.

def some_function(a: int, b: int, c: 'This is annotation for c'):
    pass

위의 경우 c 매개변수의 역할을 설명하기 위한 annotation이 그 의미처럼 '주석' 처럼 붙어있다. 다만 comment와는 다른 점은, 저 주석은 런타임으로 문서를 볼 수 있는 Python 특유의 문법이라는 점이다. 따라서 아주 특별한 케이스로 볼 수 있다.

그 외에 역시 Python의 Type Annotation이라 불리는 기능도 역시나 annotation이라는 이름을 달고 있다. 이 기능은 타입 힌트를 주는 방식으로 강타입 언어의 특징을 대충(?) 붙여주는 용도로 사용된다.

결론적으로 개발자에겐 Annotation이라는 용어는 코드에 영향을 끼치는 다양한 지시어 정도의 의미인 것 같다. 사실 의미를 따지기엔 너무 다양하게 쓰여서 그냥 가져다 쓰기 나름인 것 같다.

개발자의 Comment

프로그래밍 언어에 있어서 주석(comment)은 실행에 아무런 영향을 끼치지 않고 오로지 코드 읽기를 위한 보조 설명이나 문서화에만 관여하는 문법이다. 예를 들자면 C 언어를 기준으로 아래와 같은 식으로 표현한다.

/* This function do something */
void do_something() {
  printf("Some! Thing!\n");  // this is something!
}

여기서 /* ... */ 로 표시한 것이 일반적인 C 언어식 주석이고, // 로 시작하는 것이 C++에서 유래한 한 줄 짜리 주석 문법이다.

이런 주석은 실제 실행에는 아무런 영향을 끼치지 않는다. 실제로 위 코드에서 주석의 문법 자체만 그대로 놔두고 내용은 마음대로 고쳐도 빌드 에러나 런타임 오류는 나지 않는다.

결론

일반인에게 annotation은 문서에 첨부하는 보조 설명 용도의 주석이고, comment는 의견 혹은 댓글(?)이라는 의미로 가장 많이 쓰인다.

개발자에게 annotation은 코드에 의미를 가지는 뭔가를 지시하거나 알려주기 위한 특정한 문법을 의미하고, comment는 코드 실행에 영향은 안 끼치면서 코드를 설명하기 위한 보조 설명이다.