본문 바로가기
파이썬

파이썬 입문 - 9. 파이썬에서의 고급 객체지향 기술

by blacknabis 2024. 4. 21.
1. 추상 클래스와 추상 메서드

추상 클래스는 하나 이상의 추상 메서드(구현이 정의되지 않은 메서드)를 포함하는 클래스입니다. 이는 다른 클래스가 상속받아 구현해야 하는 메서드를 정의하는 용도로 사용됩니다.

  • 추상 클래스의 선언: abc 모듈을 사용하여 추상 클래스와 추상 메서드를 선언합니다.
from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

class Cat(Animal):
    def make_sound(self):
        return "Meow!"
2. 캡슐화

캡슐화는 객체의 세부 구현 내용을 숨기고, 외부 인터페이스만을 통해 접근을 제한하는 기술입니다. 이는 데이터와 코드를 외부의 간섭으로부터 보호합니다.

  • Private 속성 사용: 속성 이름 앞에 두 개의 밑줄(__)을 추가하여 속성을 비공개로 만듭니다.
class Account:
    def __init__(self, owner, balance):
        self.owner = owner
        self.__balance = balance

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            print("Deposit successful!")
3. 다중 상속

다중 상속은 하나의 클래스가 두 개 이상의 부모 클래스로부터 속성과 메서드를 상속받을 수 있게 해주는 기능입니다.

  • 다중 상속의 사용: 클래스가 여러 기능을 조합해야 할 때 유용합니다.
class Flyable:
    def fly(self):
        print("Flying")

class Swimable:
    def swim(self):
        print("Swimming")

class Duck(Flyable, Swimable):
    pass

duck = Duck()
duck.fly()
duck.swim()
4. 디자인 패턴

디자인 패턴은 특정 문제에 대한 해결책을 제공하는 일반적이고 재사용 가능한 솔루션입니다. 파이썬에서 자주 사용되는 디자인 패턴에는 싱글톤, 팩토리, 옵저버 패턴 등이 있습니다.

  • 옵저버 패턴 예시: 객체의 상태 변경을 관찰하는 관찰자 목록에 자동으로 알림을 보냅니다.
class Subject:
    def __init__(self):
        self.__observers = []

    def register_observer(self, observer):
        self.__observers.append(observer)

    def notify_observers(self, message):
        for observer in self.__observers:
            observer.notify(message)

class Observer:
    def notify(self, message):
        print(f"Received: {message}")

subject = Subject()
observer = Observer()
subject.register_observer(observer)
subject.notify_observers("Hello!")