SR's Dev-Log

[OOP] 추상화(상속, 다형성, 추상 타입)와 재사용

본문은 “개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴”(최범균 저)을 읽고 정리한 내용입니다. 이전 글에서 다뤘던 캡슐화란, 내부 구현의 유연함을 달성하는 방법이었다. 캡슐화에 대한 내용은 [링크]에서 확인 가능하다! 이번 글에서는 외부 구현의 유연함을 달성하는 방법인 추상화를 다뤄보자! ▼ 객체지향에서 구현 변경...

[Better Way #50] __set_name__으로 클래스 애트리뷰트를 표시하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스를 이용하면 클래스가 정의된 후, 클래스가 실제로 사용되기 이전 시점에 프로퍼티를 변경하거나 표시할 수 있다. 애트리뷰트가 포함된 클래스 내부에서 애트리뷰트 사용...

[Better Way #49] __init_subclass__를 사용해 클래스 확장을 등록하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 메타클래스를 이용해 클래스를 확장하는 다른 용례로 프로그램이 자동으로 타입을 등록하는 것이 있다. 간단한 식별자를 이용해 그에 해당하는 클래스를 찾는 역검색을 하고 싶을 ...

[Better Way #48] __init_subclass__를 사용해 하위 클래스를 검증하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. 1. 메타클래스의 가장 간단한 활용법 메타클래스의 대표적인 사용 목적은 어떤 클래스(하위 클래스)가 제대로 구현됐는지 검증하는 것이다. 복잡한 클래스 계층을 설계할...

[Better Way #46] 재사용 가능한 @property 메서드를 만들려면 디스크립터를 사용하라

본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 06. Metaclasses and Attributes”을 읽고 정리한 내용입니다. TL;DR @property 메서드의 동작과 검증 기능을 재사용하고 싶다면 디스크립터 클래스를 만들어라. 디스크립터 클래스를 만들 때는 메모리 누수를 방지하며 각...

[Python] heapq 우선순위 큐에서 최솟값 추출하기

heapq 우선순위 큐, 즉 최소힙에서 최솟값을 삭제하지 않고 얻으려면 [0] 인덱스를 통해 접근하면 된다. 왜냐하면 최소힙을 구성하는 과정(heapify)에서 매번 새로운 최솟값을 [0] 인덱스에 위치시키기 때문이다. 하지만 [1] 인덱스에 두 번째로 작은 원소, [2] 인덱스에 세 번째로 작은 원소가 들어있는 것은 아니다. 두 번째로 작은...