프로필사진

IT Anthology/encyclopedia

[객체 지향 프로그래밍] 추상화

다각 2022. 3. 14. 07:54

* 이 글은 코드잇의 <객체 지향 프로그래밍> 코스를 수강하고 정리한 글입니다.
* 나중에라도 제가 참고하기 위해 정리해 두었으며, 모든 내용을 적은 것이 아닌,
필요하다고 생각되는 부분만 추려서 정리한 것임을 미리 밝힙니다.


추상화란?

정의: 어떤 것을 사용할 때, 몰라도 되는 부분은 감추고, 꼭 알아야하는 부분만 드러내는 것
프그래밍에서 추상화란? : 프로그래머들이 특정 코를 사용할 때 필수적인 정보를 제외한 세부사항을 가리는

변수나 함수의 정의도 일종의 추상화라고 볼 수 있음!!

<- 변수의 값을 한번 설정하면 이후에 변수의 값을 알지 못해도 그 변수를 사용할 수 있기 때문

(아기의 이름 짓기가 어려운 이유도 그 존재에 대한 최초의 추상화가 이루어지기 때문이 아닐까)

: 따라서 추상화 잘하는 첫번째는 이름짓기...

: 예를 들어 함수 이름이 `method\_1` 이딴 식이면 코딩하는 본인도 헷갈릴 거임

<- 함수 또한 함수 이름과 뭘 하는지만 알면 그 안에 동작은 몰라도 사용할 수 있음

추상화를 잘 하기위한 노력

1. 이름 짓기 (괜히 프로그래머들이 변수명 지을 때 머리 싸매는 것이 아님)

2. 문서화하기

: docstring을 추가하여 문서화를 할 수 있다.

:`help(클래스명)`을 사용하면 docstring으로 작성한 설명들을 확인할 수 있다.

3. 문서화의 세가지 방법

예를 들어 다음과 같은 메소드의 docstring을 작성한다고 했을 때,

def find_suggestion_videos(self, number_of_suggestions=5):

각 스타일별 문서화 스타일은 아래와 같다.

(1) Google doctring

"""유저에게 추천할 영상을 찾아준다
Parameters:
  number_of_suggestions (int): 추천하고 싶은 영상 수
    (기본값은 5)

Returns:
  list: 추천할 영상 주소가 담긴 리스트
"""

(2) reStructuredText (파이썬 공식 문서화 기준)

"""유저에게 추천할 영상을 찾아준다

:param number_of_suggestions: 추천하고 싶은 영상 수
  (기본값은 5)
:type number_of_suggestions: int
:returns: 추천할 영상 주소가 담긴 리스트
:rtype: list
"""

(3) NumPy/SciPy (통계, 과학 분야에서 쓰이는 Python 라이브러리)

"""유저에게 추천할 영상을 찾아준다

Parameters
----------
number_of_suggestions: int
  추천하고 싶은 영상 수 (기본값은 5)

Returns
-------
list 
  추천할 영상 주소가 담긴 리스트
"""

type-hinting
파이썬은 동적타입언어이다. 변수에 대한 자료형을 따로 설정하지 않아도 되기 때문에 편해 보일 수도 있지만, 300줄이 넘어가는 코딩을 할 때면 함수에 들어가는 변수의 자료형이 뭐였는지, 나오는 아웃풋의 자료형은 뭔지 헷갈리게 되기 마련이다. (이것 때문에 정적타입언어를 선호하시는 분들도 맡ㅎ다고...)
이를 보완하기 위해 파이썬에는 type hinting이 존재한다.

type hinting은 다음과 같이 사용한다.

def calculate(self, a: float, b: float) -> float:

type hinting을 지키지 않아도 파이썬이 실행이 되긴 하지만 IDE 등에서 경고 메세지가 출력될 수 있다.

그러나 주의할 점은, type hinting은 파이썬 3.5버전부터 지원하기 때문에 python 3.5 이전의 버전에서 실행할 때는 코드에 오류가 나타날 것이다!! 또한, type hinting이라는 개념 자체가 동적 언어인 파이썬과 어울리지 않는다는 시선도 있다.