Computer Engineering/Fluent Python 정리 22

Fluent Python Chapter 21. 클래스 메타프로그래밍

Introduction 21장은 클래스 메타프로그래밍입니다. 런타임에 클래스를 생성하고 변경하는 프로그래밍 방법을 의미합니다. 파이썬 Guru개발자들을 프레임워크를 만드는것이 아니면 해당 기능을 사용하는 것을 권장하지 않습니다. 해당 기능이 주는 편리함보다는 해치는 가독성이 더 크기 때무일 것 같습니다. 인터프리터단에서 동작하는 부분이 많을수록 파이썬으로 어플리케이션을 주로 개발하는 개발자들에게는 가독성이 좋지 않을 수 있습니다. 해당 장에서는 클래스를 생성하는 함수를 이용해서 클래스를 만드는 것을 시작으로 클래스 데커레이터, 임포트 타임과 런타임, 메타클래스에 대해서 살펴봅니다. 지난 장에서 descriptor 객체의 storage_name이 구분하기 어려웠던 것들을 클래스 데커레이터와 메타클래스를 사..

Fluent Python Chapter 20. 속성 디스크립터

Introduction 20장은 속성 디스크립터 입니다. 디스크립터는 객체의 속성의 접근 및 관리를 위한 __get__(), __set__(), __delete__() 메서드로 구성된 프로토콜을 구현한 클래스입니다. 19장에서는 디스크립터 프로토콜을 구현한 property 클래스로 객체 속성을 생성하고 접근했었습니다. 20장에서는 직접 descriptor클래스를 만들어 객체의 속성을 만들 때 사용합니다. 이런 부분은 Django, SQLAlchemy의 모델 부분의 column 속성에서도 사용된 부분으로 관련 프레임워크를 만들거나 공부하고 있는 분들께도 공부하시면 도움이 될 것 같습니다. 책 시작말에 있는 파이썬 핵심 개발자인 레이몬드 헤팅거가 말한 것 처럼 디스크립터에 대해 배우면 더욱 다양한 도구에 접..

Fluent Python Chapter 19. 동적 속성과 프로퍼티

Introduction 19장 부터 21장 까지는 이 책에서 마지막 Part인 메타프로그래밍입니다. 메타 프로그래밍에 대한 정의는 7장에서 데코레이터를 살펴보면서 잠시 살펴봤습니다. 다시 한 번 정의만 간단히 살펴보면 다음과 같습니다. 메타 프로그래밍은 컴퓨터 프로그램이 다른 컴퓨터 프로그램을 데이터와 같이 처리하는 능력을 가지도록 프로그래밍하는 방법(technique)이다. 이번 장에서는 동적으로 속성에 접근할 수 있는 방법을 살펴보면서 해당 방법으로 프로그램이 데이터에 따라서 동작하게 됩니다. 동적으로 접근할 수 있는 다양한 방법을 살펴보고, 프로퍼티(property)를 이용해서 데이터에 대한 접근이나 속성에 대한 validation 등을 구현합니다. 또, 마지막 부분에서 다양한 속성 프로그래밍을 지..

Fluent Python Chapter 18. asyncio를 이용한 동시성

Introduction 17장에서는 concurrent.Future를 이용한 동시성 프로그래밍을 다뤘습니다. 18장에서는 asyncio를 이용한 동시성을 구현합니다. concurrent는 thread와 process를 추가로 사용하여 동시성을 추구했었는데 asyncio는 주로 하나의 스레드의 이벤트 루프에서 동시성을 구현합니다. 재미있는 부분 중 하나는 zen of python 중 하나인 '작업을 수행하는 방식이 한 가지만 있어야 한다.' 라는 부분을 asyncio패키지 또한 concurrent와 비슷한 Future 인터페이스를 구현해서 따랐다는 점이다. 이 장에서는 주로 yield from, coroutine, Future 객체, asyncio event loop를 활용해서 동시성을 구현하는 방법을 설..

Fluent Python Chapter 17. Future를 이용한 동시성

Introduction 17장에서는 Future를 이용한 동시성 프로그래밍에 대해서 다룹니다. Future객체는 미래에 앞으로 일어날 일을 나타내는데 해당 객체는 concurrent.futures 뿐만 아니라 asyncio의 패키지의 기반이 되는 개념입니다. 전반적으로 해당 패키지를 통해서 어떻게 프로그램을 동시에 수행시키면 좋을지에 대한 코드를 설명합니다. 또, 파이썬의 GIL이 어떻게 동시성 프로그래밍에서는 동작하는지도 살펴봅니다. 마지막으로는 상위 인터페이스가 맞지 않는 경우에는 threading과 multiprocessing 모듈로 동시성 작업도처리할 수 있음을 간략히 설명합니다. 전반적인 파이썬에서의 동시성 프로그래밍에 대한 내용을 다룬 장이라고 생각됩니다. 책 정리를 시작한 이유 책 정리를 시..

Fluent Python Chapter 16. 코루틴 (Coroutine)

Introduction 16장에서는 주로 Coroutine에 대한 chapter입니다. 책에서는 Coroutine의 개념에 대해서 자세히 소개하기 보다는 어떻게 동작하는지 어떻게 구현하는지에 대해서 집중해서 설명합니다. 그래서 첨언을 넣자면 Coroutine은 Subroutine(일반 함수, 호출되면 return될 때까지 실행이된다.)과는 다르게 여러개의 진입점을 가지고 함수의 중간에 제어를 다시 호출자에게 넘기고, 호출자에게 다시 제어를 받아서 중간 부터 다시 일행 할 수 있습니다. 이런 특징이 있기 때문에 멀티 태스킹 협업을 구현하는데 많이 사용되고 있습니다. 파이썬에서는 yield 구문을 이용해서 coroutine을 만들 수 있는데 yield 구문이 어떻게 진화해왔는지와 어떻게 사용하는지에 대해서 ..

Fluent Python Chapter 15. Context manager와 else 블록

Introduction 15장에서는 주로 Context manager에 대해서 설명합니다. Context manager가 어떻게 도입되게 되었고, 어떤 프로토콜을 구현해야 하는지등을 설명합니다. 단순히 Resource관리를 위해서 사용하는 것이 아닌 다양한 Context를 유지하는데 사용할 수 있는 멋있는 기능입니다. 또, else 블록을 끼워서? 설명합니다. else 블록은 if문 외에도 for, while, try 블록에서도 사용할 수 있는데 이런 부분에 대해서 저자의 생각과 어떨 때 사용하면 좋은지 설명합니다. 책 정리를 시작한 이유 책 정리를 시작한 이유 Chapter1의 Introduction 부분에서 이야기 한 것처럼 지난 5년간 다양한 언어나 프레임워크 및 프로그램을 공부하고 이용하여 소프트..

Fluent Python Chapter 14. 반복형, 반복자, 제너레이터

Introduction 14장에서는 데이터를 처리할 때 항상 다루는 반복에 대해서 다룬다. Iterable, Iterator, Generator에 대해서 다루면서 iter() 내장 함수가 동작하는 방법을 살펴 본 후에 Generator가 데이터를 어떻게 느긋하게 가져오는지 살펴본다. 그리고 표준 라이브러리에서 제공하는 제너레이터를 살펴보면서 파이썬에서 효율적으로 데이터를 반복해서 가져와서 처리하는 방법들을 살펴본다. 책 정리를 시작한 이유 책 정리를 시작한 이유 Chapter1의 Introduction 부분에서 이야기 한 것처럼 지난 5년간 다양한 언어나 프레임워크 및 프로그램을 공부하고 이용하여 소프트웨어를 개발했는데 이것저것 하다 보니 자주 사용하는 언어임에도 불구하고 파이썬을 잘 활용하고 있느냐에 ..

Fluent Python Chapter 13. 연산자 오버로딩(feat. 제대로 하기)

Introduction 12장에서는 파이썬의 연산자를 오버로딩을 적절하게 하는 법을 다룬다. 파이썬은 원래 오버로딩을 지원하지 않으나 argument의 type이 다른 인자를 사용할 수 있다는 측면에서는 부분적으로 오버로딩이 가능하다고 할 수?도 있다. 책에서는 내장 자료형의 연산자를 오버로딩 하지 말아야 하며, is, and, or, not을 제외한 기존 연산자만 오버로딩할 수 있다. 또, 피연자를 변형하지 않아야 하고(가변 객체일 수도 있기 때문에), 다른 자료형과의 연산을 지원할 때는 예외를 발생시키지 않고 실제로 동작 순서를 살펴보면서 NotImplmented를 반환함으로썬 파이썬 인터프리터가 그 연산자의 역순 메서드( ex. __radd__())를 호출해볼 수 있게 해줘야 한다. 이외에도 서로 ..

Fluent Python Chapter 12. 내장 자료형 상속과 다중 상속

Introduction 11장에서는 파이썬에서 인터페이스를 동적 프로토콜(덕타이핑)과 ABC를 활용해서(구스타이핑) 구현하면서 각각의 장단점과 어떤 상황에 적절한지를 살펴봤습니다. 12장에서는 내장 자료형을 상속하면 어떤 문제가 있는지와 다중 상속을 하려고 할 때 어떤 부분들을 주의해야 하는지를 살펴봅니다. 다중 상속과 관련하여 믹스인과 MRO와 같은 개념들도 살펴보기 때문에 나중에 프레임워크를 만들어보고 싶으신 분들은 주의 깊게 보시면 좋을 것 같습니다. 책 정리를 시작한 이유 책 정리를 시작한 이유 Chapter1의 Introduction 부분에서 이야기 한 것처럼 지난 5년간 다양한 언어나 프레임워크 및 프로그램을 공부하고 이용하여 소프트웨어를 개발했는데 이것저것 하다 보니 자주 사용하는 언어임에도..

반응형