프로그래밍/파이썬 4

[Python] 데코레이터 ( decorator )

데코레이터 데코레이터는 사용자가 기존 함수를 수정하지 않고, 새로운 기능을 추가할 수 있는 Python 의 디자인 패턴이다. 데코레이터를 이해하기 전에 알아야할 가장 중요한 것이 있다. 바로, 파이썬에서는 함수도 객체라는 것이다. 함수가 객체이기 때문에 다음 3가지도 파이썬에서는 가능하다. - 함수를 변수에 담을 수 있다. - 함수를 파라미터로 전달할 수 있다. - 함수 안에서도 함수를 정의할 수 있다. 이 개념을 활용해 데코레이터 함수를 작성할 수 있다. 데코레이터 이해하기 데코레이터의 정의에서 사용자가 기존 함수를 수정하지 않고, 새로운 기능을 추가할 수 있다는게 어떤 의미일까? 인사를 하는 greeting 함수를 작성했다고 가정하자. def greeting(): print("Nice to meet ..

[Python] yield 키워드

append 보다 빠르게 yield! 개발 중 json 데이터를 특정 리스트의 형식으로 붙여야하는 상황이 생겼다. 평소라면 append 를 사용했겠지만 데이터 양이 너무 많아서 시간을 단축해야 했다. 그러던 중 저번에 클린 코드 책에서 본 yield 를 이용한 append 대체 방식이 문득 생각나서 적용해보았고, 더 빠른 결과를 얻을 수 있었다. 이참에 yield 에 대해 한번 정리해보기. iterable 과 generator yield 를 이애하기 전 알아야 하는 2가지 개념 : iterable 과 generator iterable 반복 가능한 객체 ( list, dict, set, tuple, ragne, ... ) 모든 값들을 메모리에 저장함 >>> temp = [x for x in range(3)..

[Python] 추상 클래스

추상 클래스는 부모 클래스에 미구현 메소드 ( 추상 메소드 ) 가 있고, 이걸 자식 클래스에서 꼭 구현해야하는 클래스를 말한다. 자식 클래스들이 꼭 실행하거나 override 해야하는 함수가 있을 때 사용할 수 있다. 또, 자식 클래스들이 공유할 수 있는 기본 클래스들의 공통된 정의를 내려주기떄문에 템플릿처럼 사용될 수 있어, template method pattern 과 함께 자주 사용된다. 코드 구현시에는 추상화를 지원해주는 abc (abstract base class) 모듈을 임포트해야 사용할 수 있다. from abc import * class CatBase(metaclass=ABCMeta): @abstractmethod def eat(self): pass @abstractmethod def sl..

[Python] 클래스를 사용해야하는 이유

최근에는 계속 파이썬을 사용하고 있고 클린코드에도 관심이 많아졌다. 그래서 개발 중 중복되는 코드를 줄이고, 비슷한 함수의 작동을 확장하여 사용하기 위해 클래스와 상속을 사용하게 되었다. 코드를 이래저래 정리하다보니, 결국 코드 중복을 막기 위해서만 사용해버린 꼴이 되어버렸다. 하지만 최근 "파이썬 클린 코드" 라는 책을 읽었을 때는 코드 중복을 줄이기 위해서만을 위해 클래스를 사용하는 것은 좋은 방법이 아니라고 기재되어 있었다. 또, 동료가 그 부분에서 왜 굳이 함수만 선언하는게 아니라 클래스를 사용했냐고 했을때, 명쾌한 답을 내리지 못했다. 그래서 클래스를 왜 사용해야하는지 정리해보기로 했다. 이 주제에 대해 구글링했는데 설명이 잘 되어 있는 글을 바로 찾을 수 있었다. "Classes provide..