CHAAANY ARCHIVE

Python Protocol

4개의 기록을 주제별로 둘러보세요.

Python 추상 클래스와 추상 메서드: ABC·abstractmethod의 실제 동작

Python에서 추상 클래스는 “상속만 가능한 불완전한 클래스”라기보다, 구현체가 지켜야 할 최소 계약을 실행 시점에도 확인하는 도구에 가깝다. abc.ABC를 상속하고 @abstractmethod를 붙이면, 구현되지 않은 추상 메서드가 남은 클래스의 인스턴스 생성을 막을 수 있다.여기서 자주 놓치는 조건이 있다. ABC를 상속했다는 이유만으로 항상 인스턴스화가 금지되는 것은 아니다. 클래스의 __abstractmethods__에 구현되지 않은 항목이 남아 있을 때만 TypeError가 발생한다.가장 작은 실행 예제직렬화 형식을 예로 들면 계약과 공통 구현을 한 클래스에 둘 수 있다.from abc import ABC, abstractmethodfrom pathlib import Pathclass Ser..

Python 상속과 Interface 설계: super·MRO·Protocol·Composition 선택 기준

상속은 코드 복사 없이 기능을 확장하는 문법이지만, 재사용을 위한 기본 선택지는 아니다. 부모의 내부 변화가 자식의 동작을 흔들 수 있고, 계층이 깊어지면 어느 method가 실행되는지 추적하기 어려워진다. 먼저 하위 타입 관계가 진짜 필요한지, 아니면 단지 기능을 빌려 쓰고 싶은지를 나눠 봐야 한다.Python에서는 interface를 표현하는 방법도 하나가 아니다. duck typing, abc.ABC, typing.Protocol이 각각 다른 강도의 계약을 제공한다. 여기에 composition까지 놓고 보면 설계 선택이 훨씬 선명해진다.상속은 is-a 관계와 대체 가능성에서 시작한다Dog가 Animal의 한 종류라는 문장만 자연스럽다고 충분하지는 않다. 부모 타입을 기대하는 코드에 자식 객체를 넣..

Python으로 다시 보는 SOLID: 다섯 원칙보다 변경 경계가 먼저다

SOLID는 클래스를 많이 만들라는 규칙이 아니다. 서로 다른 이유로 바뀌는 코드를 분리하고, 한쪽의 변경이 다른 쪽으로 번지는 범위를 줄이는 설계 기준에 가깝다. Python에서는 모든 구현에 추상 클래스를 붙이기보다 실제 변경 지점을 찾고 Protocol, 작은 함수, 합성 같은 도구를 필요한 만큼 쓰는 편이 자연스럽다.다섯 글자를 외우기 전에 “누가 이 코드를 바꾸며, 무엇이 함께 바뀌어야 하는가?”를 먼저 묻는 이유다.SOLID를 한 문장씩 다시 정의하면원칙실무적인 질문흔한 오해SRP이 모듈의 변경을 요구하는 주체가 하나인가?클래스에는 메서드가 하나만 있어야 한다OCP이미 검증한 핵심 흐름을 덜 건드리고 새 동작을 붙일 수 있는가?기존 코드는 절대 수정하면 안 된다LSP구현을 바꿔도 호출자가 기대..

응집도와 결합도: 변경 비용으로 판단하는 모듈 설계

“높은 응집도와 낮은 결합도”는 외우기 쉬운 문장이지만 code review에서 그대로 쓰면 판단이 모호하다. 더 실용적인 질문은 두 가지다.이 module 안의 code가 같은 이유로 함께 바뀌는가한 module의 변경이 몇 개의 외부 module까지 연쇄 수정시키는가응집도(cohesion)는 한 module 내부의 책임이 얼마나 한 목적에 모여 있는지, 결합도(coupling)는 module 사이의 지식과 의존이 얼마나 강한지를 나타낸다. 목표는 dependency를 없애는 것이 아니라 필요한 dependency를 드러내고 변경이 새는 범위를 줄이는 것이다.응집도는 코드가 가까이 있다는 뜻이 아니다한 class에 method가 모여 있다고 응집도가 높은 것은 아니다. 다음 신호가 있으면 서로 다른 변..

728x90