TigerCow.Door


안녕하세요. 문범우입니다.

이번 포스팅에서는, 파이썬에서 제공되는 annotation에 대해서 알아보도록 하겠습니다.



1. Annotation 이란?


우선 Annotation의 사전적 정의는 "주석"이다. 즉, 쉽게 말해서 코드에 대한 추가적인 설명을 이야기하는 무언가를 의미한다.

대표적으로 Java언어에서 함수나 클래스 상단에 @를 통해 annotation을 표시한다.



위는 java의 spring 프레임워크를 사용한 코드 중 일부인데, 10번, 13번, 16번 라인을 보면 @를 통해 annotation을 사용하고 있음을 볼 수 있다. 물론 자바에서의 annotation과 파이썬에서의 annotation은 차이가 있을 수 있다. 하지만 기본적으로 로직이 되는 코드를 "도와주는" 의미에서는 크게 다르지 않다고 볼 수 있다.

(사실 java의 annotation과 같은 것을 파이썬에서는 decorator로 나타내기 때문에 엄밀히 말했을 때, 자바의 annotation과 파이썬의 annotation은 다르다고 볼 수 있다.)


보다 자세히, 파이썬에서의 annotation에 대해서 알아보자.

사실 파이썬에서는 annotation에 대한 강제성이 전혀 없다. 우리가 파이썬에서 #을 이용하거나, 지난 포스팅에서 알아본 docstring과 같이 안써도 되지만, 보다 좋은 코드가 될 수 있도록 추가적으로 관리해주는 것 중 하나일 뿐이다.

파이썬에서 사용하는 annotation의 기본 아이디어는, 코드를 사용하는 이에게 함수나 클래스에 대해 그 인자값의 형태 또는 반환값을 알려주자는 것이다.


함수에 대해서는 함수의 인자에 대한 타입에 대한 힌트를 적거나, 함수의 return값에 대한 타입을 알려줄 수 있다. 또한 파이썬 3.6이후로는 변수에 대해서도 직접 annotation을 달 수 있다. 즉, 클래스에서 사용되는 변수값에 대해 그 타입을 적어둘 수 있다는 것이다.



2. Annotation 사용하기


백문이 불여일견, 우선 Annotation을 사용한 파이썬 코드를 살펴보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#-*- coding:utf-8 -*-
class AnnotationClassExample:
    """
    Annotation에 대한 예시를 확인하기 위한 class입니다.
    __annotation__ 속성을 통해
    class할당되는 first_param과 second_param에 대한 타입을 확인할 수 있습니다.
    """
    first_param: str
    second_param: int
 
    def set_first_param(self, value: str-> None:
        """
        AnnotationClassExample 클래스의
        first_param 값을 바인딩합니다.
        함수의 반환은 없습니다.
        """
        self.first_param = value
 
    def set_second_param(self, value: int-> bool:
        """
        AnnotationClassExample 클래스의
        second_param 값을 바인딩합니다.
        함수의 반환은 True or False 입니다.
        """
        if type(value) == int:
            self.second_param = value
            return True
        else:
            self.second_param = 0
            return False
 
def main():
    print("Annotation 만들어보기")
    new_class = AnnotationClassExample()
    print("\n* AnnotationClassExample 클래스의 annotations")
    print(new_class.__annotations__)
    print("\n* set_first_param 함수의 annotations")
    print(new_class.set_first_param.__annotations__)
    print("\n* set_second_param 함수의 annotations")
    print(new_class.set_second_param.__annotations__)
 
if __name__ == '__main__':
    main()
cs


https://github.com/doorBW/python_clean_code


위의 코드에서는 AnnotationClassExample 클래스와 그 내부에 2개의 변수를 가지고 있으며, 클래스 내부에 2가지 함수를 추가로 구현해두었다. 


우선 함수에 대한 annotation을 살펴보자.

11번, 19번 라인의 함수선언부를 살펴보면 함수의 인자에 대한 annotation과 함수의 return에 대한 annotation이 적용되었다. 이를 통해 함수를 사용하고자 하는 이는 함수의 인자가 어떤 타입을 가져야하는지, 그리고 함수를 통해 얻게되는 값의 타입은 무엇인지 보다 쉽게 알 수 있다.

또한 파이썬 3.6부터 변수에 대한 annotation이 가능하다고 했는데, 이는 8번, 9번 라인과 같이 클래스 내부의 변수에 대한 annotation으로 사용할 수 있다. 


이렇게 annotation을 적용하면, 그 개체에 대해 __annotations__ 이라는 속성이 생긴다. 그리고 해당 속성을 통해 우리가 적용해둔 annotation 값을 볼 수 있는 것이다.

실제로 위의 코드를 실행시켜 보면 main함수내에서 각 클래스와 함수에 대해 __annotations__ 속성을 호출하고, 그 결과는 다음과 같다.



우리가 코드에서 적용시켜준 annotation들이 출력되는 것을 확인할 수 있다.


위와 같이 annotation을 통해 함수나 변수 등에 미리 타입에 대한 힌트를 적어둘 수 있다.

물론 이 또한 파이썬에서 강제성이 있거나, 지켜야 한다는 것은 아니다. annotation은 말 그대로 '힌트'를 주는 것에 불과하다.





블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요

파이썬 클린 코드

[해당 리뷰는 터닝포인트 출판사에서 서적을 지원받고 작성하게 되었습니다.]

파이썬 클린코드

기초적인 파이썬 내용을 넘어, 보다 전문적인 파이썬 개발자가 되고자 하는 분

 

안녕하세요. 문범우입니다.

최근 개인적인 사정으로 인해 블로그에 글을 많이 못올리는데,

오랜만에 IT 도서리뷰로 포스팅을 하게 되었습니다.

이번에 소개해드릴 서적은, 터닝포인트 출판사에서 나온 '파이썬 클린코드'라는 서적입니다.

그럼 간단하게 나마 해당 책에 대한 소개를 드려보도록 하겠습니다.

 

누가 읽으면 좋을까?

사실 이 책에 대해서 이야기를 할 때, 대상 독자에 대한 고려가 제일 필요하다고 생각됩니다.

솔직하게 말씀드려서 아직 파이썬이라는 프로그래밍 언어가 낯설거나, 처음이신분들, 유지보수에 대해서 아직 정확히 파악하지 못했거나 소프트웨어 공학에 대해서 전혀 알지 못하시는 분들에게는 절대 추천드리지 않습니다.

그런 분들께서는 오히려 책의 내용이 지루할 뿐만 아니라, 하나하나 이해하기도 힘들 수 있을 것이라 생각됩니다.

반대로, 파이썬 언어에 대해서 익숙하신 분들, 팀 프로젝트를 하며 코드의 유지보수성에 대해서 고민하신 분들에게는 적극적으로 추천드리고자 하는 책 입니다.

 

소프트웨어 공학의 중요 개념과 파이썬의 연결고리

사실 저는 소프트웨어 공학에 대해서 학습하면서, 당연히 이론적인 내용도 중요했지만 실제로 코드에서 그것들이 어떻게 반영되는지를 무척이나 궁금해했습니다. 하지만 대학에서 이에 대해서 학습할 때에는 자바(Java)언어에 대해 한정적으로 배울 수 있었습니다.

물론 해당 내용이 이론적으로 잘 이해하고 공부한다면 언어는 단순히 도구적으로 사용될 뿐이지만, 개인적으로 파이썬을 좋아하는 개발자로써 파이썬에서의 소프트웨어 공학의 이론들은, 개념들은 어떻게 적용되고 있을까, 실제로 파이썬 언어만의 특징을 어떻게 더 살려낼 수 있을까? 에 대해서 고민한 적이 많습니다.

그리고 이번에 소개시켜드리는 책에서는 그러한 부분들을 많이 해소시킬 수 있었습니다.

책의 목차에서도 그렇듯, '파이썬 클린코드' 서적에서는 우리가 그동안 배웠던 소프트웨어 공학의 내용들과 파이썬 언어만의 특징을 잘 살려내서 설명해주고 있습니다.

 

아쉬웠지만 극복할 수 있는 키워드 설명

책을 읽으면서 아쉬웠던 점은, 가끔 특정 키워드나 개념에 대해 충분한 설명없이 넘어가는 점들이 있습니다.

하지만 이를 '극복할 수 있는' 이라고 말씀드리는 것은, 그러한 것들이 엄청나게 많다거나, 그러한 것들 때문에 다른 내용이 읽히지 않는 정도는 아니기 때문입니다.

오히려 저는 책의 중간중간 포스트잍을 붙여가면서 모르는 키워드에 대해서 정리하고, 그것을 기반으로 해당 챕터의 내용을 다시 상기할 수 있게끔 하는 방법을 사용했는데, 더 공부한 느낌도 나고 정리도 잘 되는 것 같아서 내심 뿌듯했습니다 :)

 


이렇게 '파이썬 클린코드' 서적에 대해 개인적으로 생각하는 특징을 바탕으로 짧게나마 정리해보았습니다.

사실 무엇보다 개인적으로는, 최근 파이썬 언어가 핫해지면서 기초적인 책들이 많이 나오고 있는데, 그 와중에 오랜만에 적당히 깊이있고 잘 정리되어 있는 책이 나와서 너무나 반갑고 재미있게 읽은 책인 것 같습니다.

 

자신이 파이썬 언어에 대해서 보다 깊이 공부하고 싶고, 어느정도 자신이 있다면 꼭 한번 읽어보시기를 적극적으로 추천드립니다.

블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요