본문 바로가기
728x90

CS33

[Python] 인터페이스, 프로토콜, 추상 베이스 클래스 객체지향 프로그래밍은 결국 인터페이스에 관한 것이다. 파이썬에서 타이핑(typing)을 이해하는 가장 좋은 방법은 인터페이스가 제공하는 기법을 이해하는 것이다.타이핑의 분류덕 타이핑: isinstance()로 검사하지 않는 모든 파이썬 버전구스 타이핑: 객체가 ABC 형인지 런타임에 검사하는 것, isinstance()로 ABC에 대해서 검사하는 파이썬 2.6~정적 타이핑: C, 자바, 자료형 힌트와 외부 자료형 검사기를 사용하는 파이썬 3.5~정적 덕 타이핑: Go, typing.Protocol형 힌트와 외부 자료형 검사기를 사용하는 파이썬 3.8~두 종류의 프로토콜동적 프로토콜파이썬에서 늘 사용해 온 비공식 프로토콜, 동적 프로토콜은 암묵적이며 관례적으로 정의됨객체는 동적 프로토콜의 일부만 구현해도 .. 2025. 4. 13.
[Python] 시퀀스 특별 메서드 프로토콜과 덕 타이핑덕 타이핑그냥 오리처럼 꽥꽥거리고 헤엄치면 오리로 친다.일종의 런타임 철학: "타입이 아니라, 행동이 중요하다"메서드나 속성이 있으면 어떤 타입이든 신경 쓰지 않고 사용 가능프로토콜오리처럼 행동하는지 미리 검사해서, 문제가 있으면 사전에 알려준다.덕 타이핑을 정적 검사기로 끌어온 것프로토콜은 덕 타이핑의 원칙을 따르면서도 타입 검사 도구가 미리 검사할 수 있도록 설계된 것클래스가 프로토콜을 명시적으로 상속하지 않아도, 필요한 메서드만 있으면 해당 프로토콜로 인식됨그럼 이제 시퀀스처럼 동작하는 무언가를 위해 시퀀스 프로토콜을 구현하자시퀀스 프로토콜아래 두 메서드만 구현하면 리스트처럼 활용 가능__getitem__(self, index): 슬라이스와 인덱스를 받아서 처리__len__(se.. 2025. 4. 12.
[Python] 파이썬다운 객체 오늘은 아래 클래스에 점진적으로 기능을 추가한다.class Vector2D: def __init__(self, x, y): self.x = x self.y = y객체 표현 메서드repr(): 개발자에게 유용한 형태로 객체를 표현한 문자열 반환 (콘솔이나 디버거)str(): 사용자에게 유용한 형태로 객체를 표현한 문자열 반환 (print문)@classmethod와 @staticmethod@classmethod: 클래스에 연산을 수행하는 메서드를 정의. 클래스 자체를 첫 번째 인수로 받음@staticmethod: 메서드가 특별한 첫 번째 인수를 받지 않게 메서드를 변경포맷된 함수f-문자열, format() 내장함수, str.format() 메서드는 각 자료형이 가진 __form.. 2025. 4. 7.
[Python] 일급 함수 디자인 패턴 파이썬에서 함수를 일급 객체로 사용하여 디자인 패턴을 리팩터링하는 사례를 소개한다.전략 패턴일련의 알고리즘을 정의하고 각각을 하나의 클래스 안에 넣어서 교체하기 쉽게 만듦 상황에 따라 실행할 알고리즘을 바꿔 끼울 수 있도록 하는 패턴행동(알고리즘)을 인터페이스로 분리하고, 클라이언트(사용하는 쪽)에서는 구체적인 알고리즘을 몰라도 됨객체 지향 전략 패턴전략을 클래스 단위로 캡슐화전략마다 속성/상태(state)가 있거나 복잡한 동작을 하는 경우에 적합확장성이나 타입 힌트, 의존성 주입이 더 명확from abc import ABC, abstractmethod# 전략 인터페이스class PaymentStrategy(ABC): @abstractmethod def pay(self, amount): .. 2025. 4. 6.
[Python] 데코레이터와 클로저 함수의 데코레이터는 소스 코드의 함수에 표시해서 함수의 작동을 개선하게 해준다.다만 이를 자유자재로 사용하기 위해 클로저의 이해가 필요하다.클로저는 자신의 본체 바깥에서 정의된 변수를 함수가 포착해서 가져오는 기능이다.데코레이터다른 함수를 인수로 받는 콜러블데코레이터 실행 시점데코레이트된 함수가 정의된 직후에 실행일반적으로 파이썬이 모듈을 로딩하는 시점, 즉 임포트 시에 실행함수 데코레이터는 모듈이 임포트되지마자 실행되지만,데코레이트된 함수는 명시적으로 호출될 때만 실행됨등록 데코레이터일반적으로 데코레이터를 정의하는 모듈과 데코레이터를 적용하는 부분을 별도의 모듈에 둔다대부분의 데코레이터는 내부함수를 정의해 반환한다대부분의 데코레이터는 데코레이트된 함수를 변경한다.일반적으로 내부 함수를 정의해 반환함으로.. 2025. 4. 5.
[Python] 함수에서의 자료형 힌트 그래듀얼 타이핑정적 타이핑(static typing)과 동적 타이핑(dynamic typing)을 혼합해서 사용파이썬은 원래 동적 타이핑 언어지만, type hint (타입 힌트)를 통해 정적 타입 검사를 부분적으로 도입 -> 필요한 부분에만 타입을 명시해서 정적 타입 검사MyPy 같은 정적 분석 도구를 통해 타입 검사 가능 -> 경고메세지에 따라 점진적으로 어노테이션 추가하여 코드 품질 높이기 가능매개변수 기본def show_count(count: int, singular: str, plural: str = '') -> str:plural의 경우 기본값 ''을 넣어주어 선택적 매개변수로 활용def show_count(count: int, singular: str, plural: Optional[str].. 2025. 4. 5.
728x90