어노테이션이란

직역하면 각주라는 뜻으로 자바나 코틀린을 해본 사람이라면 @어노테이션명으로 작성된 어노테이션을 본 적 있을 것이다.
코틀린으로 작성한 코드에 자바 코드를 억지로 이식하면 뜨는 ` @Deprecated`역시 어노테이션의 일종이다.
어노테이션은 주로 런타임에 특정 기능을 실행시키도록 하거나 프로그램 빌드 시 코드를 자동생성 가능하도록 정보를 주는 등의 역할을 한다.

@app.route

위 기능에 대해 찾기 위해 나는 flask 어노테이션이라는 키워드로 구글링을 하였으나 원하는 정보를 찾았으나, 찾지 못했다.
그 이유는 정말 단순하게도 저 코드는 어노테이션이 아닌 장식자(데코레이터)로 분류되기 때문이었다.

데코레이터

데코레이터는 어떠한 기능을 부여하는 데에 사용을 한다.
예를 들어 우리가 사용한 @app.route(/)는 우리가 기본적으로 만든 url을 매핑한 뒤 매핑에 성공하였다면 /를 붙이라는 뜻이다.
데코레이터는 우리가 작성한 함수를 하나의 인자로 받아와서 url에게 전달하는 역할을 해준다.

장점

코드를 간단하게 만들 수 있다.
flask가 제공하는 데코레이터에는 여러 종류가 있는데, 단순한 함수 실행을 위한 데코레이터 이외에도 역할에 따라 실행 여부를 결정하는 등의 데코레이터도 존재한다.
즉 역할에 대해 검사를 하는 과정을 어노테이션 한 줄로 간략하게 표현하는 간소화가 가능하다는 것이다.

용도

함수나 메서드에 추가적인 기능을 부여해준다.
또한 동작의 확장 역시 데코레이터를 통해 이루어진다.
이러한 과정들은 함수를 간단하게 만들어줄뿐 아니라, 함수 사이의 관계들을 보다 명확하게 표현해줄 수 있다.
즉 웹사이트가 무겁고 복잡해져서 여러 기능을 구현해야할 때에도, A라는 url에 대해서는 이런 함수를 return한다는 관계성을 명시하는 역할을 하는 것이다.
이렇게 정리하면 코드는 유지보수가 쉬워지며 가독성 역시 증가하게 된다.

어노테이션과 데코레이터

차이점

우선 파이썬에서는 어노테이션의 역할과 표현법이 코틀린,자바에서와는 다르다.
파이썬에서 (타입)어노테이션은 일종의 힌트이지 제한이나 체크의 개념이 아니다.
따라서 어노테이션과 다른 타입을 쓰더라도 멀쩡하게 코드는 작동하다.

참조 링크

장식자의 종류 및 역할

댓글남기기