ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 배우기: OOP 기본 – 추상화와 다형성
    IT - 프로그래밍/파이썬 2025. 3. 19. 12:46
    반응형

    안녕하세요 여러분, 객체지향 프로그래밍(OOP)에서 추상화(Abstraction)와 다형성(Polymorphism) 은 코드를 더 유연하고 확장 가능하게 만드는 핵심 개념입니다. 이번 글에서는 추상화와 다형성 이 무엇인지, 그리고 파이썬에서 어떻게 구현하는지 알아보겠습니다.

    추상화(Abstraction)란?


    추상화는 불필요한 세부사항을 숨기고, 필요한 기능만 제공하는 개념입니다. 즉, 사용자는 내부 구현을 몰라도 기능을 사용할 수 있도록 하는 것이 추상화입니다.

    예제: 자동차 운전
    • 자동차를 운전할 때 핸들 조작, 가속 페달 밟기, 브레이크 밟기만 알면 됨
    • 내부적으로 엔진이 어떻게 작동하는지, 연료가 어떻게 연소되는지를 몰라도 운전 가능
    • 사용자는 필요한 기능만 사용하면 되고, 내부 구현은 숨겨짐

    추상 클래스(Abstract Class)

    파이썬에서는 abc (Abstract Base Class) 모듈 을 사용하여 추상 클래스를 정의할 수 있습니다.
    추상 클래스는 하위 클래스에서 반드시 구현해야 하는 추상 메서드(abstract method) 를 포함합니다.

    📌 추상 클래스 기본 구조

    from abc import ABC, abstractmethod
    
    class Animal(ABC):  # 추상 클래스
        @abstractmethod
        def make_sound(self):
            pass  # 반드시 하위 클래스에서 구현해야 함
    
    class Dog(Animal):  # 추상 클래스 상속
        def make_sound(self):
            return "멍멍!"
    
    class Cat(Animal):
        def make_sound(self):
            return "야옹!"
    
    dog = Dog()
    cat = Cat()
    
    print(dog.make_sound())  # ✅ "멍멍!"
    print(cat.make_sound())  # ✅ "야옹!"

    ABC 클래스를 상속 → 추상 클래스를 정의
    @abstractmethod 데코레이터 → 하위 클래스에서 반드시 구현해야 하는 메서드

    인터페이스처럼 활용하기

    추상 클래스는 인터페이스처럼 사용하여, 특정 기능을 반드시 구현하도록 강제할 수 있음

    from abc import ABC, abstractmethod
    
    class Payment(ABC):  # 결제 시스템 추상 클래스
        @abstractmethod
        def pay(self, amount):
            pass
    
    class CreditCardPayment(Payment):  # 신용카드 결제
        def pay(self, amount):
            print(f"신용카드로 {amount}원 결제 완료")
    
    class PayPalPayment(Payment):  # PayPal 결제
        def pay(self, amount):
            print(f"PayPal로 {amount}원 결제 완료")
    
    payment1 = CreditCardPayment()
    payment1.pay(10000)  # ✅ "신용카드로 10000원 결제 완료"
    
    payment2 = PayPalPayment()
    payment2.pay(5000)  # ✅ "PayPal로 5000원 결제 완료"

    Payment 추상 클래스를 통해 결제 시스템의 기본 구조 정의
    CreditCardPayment, PayPalPayment 는 반드시 pay() 메서드를 구현해야 함

    다형성(Polymorphism)란?


    다형성(Polymorphism) 은 하나의 인터페이스로 여러 가지 형태의 객체를 사용할 수 있도록 하는 개념입니다.
    즉, 같은 메서드를 여러 클래스에서 다르게 구현할 수 있습니다.

    기본적인 다형성 예제

    class Bird:
        def make_sound(self):
            return "짹짹"
    
    class Dog:
        def make_sound(self):
            return "멍멍"
    
    class Cat:
        def make_sound(self):
            return "야옹"
    
    animals = [Bird(), Dog(), Cat()]
    
    for animal in animals:
        print(animal.make_sound())
    
    # ✅ "짹짹"
    # ✅ "멍멍"
    # ✅ "야옹"

    make_sound() 메서드를 여러 클래스에서 다르게 구현
    동일한 인터페이스로 여러 객체를 다룰 수 있음

    메서드 오버라이딩(Method Overriding)

    부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의(Override)할 수 있음

    class Animal:
        def make_sound(self):
            return "소리 없음"
    
    class Dog(Animal):
        def make_sound(self):  # 부모 클래스 메서드 재정의
            return "멍멍!"
    
    dog = Dog()
    print(dog.make_sound())  # ✅ "멍멍!"

    ✅ 부모 클래스의 make_sound() 메서드를 자식 클래스에서 다르게 구현

    연산자 오버로딩(Operator Overloading)

    연산자 오버로딩을 통해 객체 간 연산을 커스텀할 수 있음

    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __add__(self, other):
            return Point(self.x + other.x, self.y + other.y)
    
        def __str__(self):
            return f"({self.x}, {self.y})"
    
    p1 = Point(2, 3)
    p2 = Point(4, 5)
    p3 = p1 + p2  # ✅ __add__() 호출
    
    print(p3)  # ✅ "(6, 8)"

    + 연산자를 오버로딩하여 객체 간 덧셈 연산 가능

    추상화 & 다형성 활용 예제

    #동물 소리 시스템

    from abc import ABC, abstractmethod
    
    class Animal(ABC):
        @abstractmethod
        def make_sound(self):
            pass
    
    class Dog(Animal):
        def make_sound(self):
            return "멍멍!"
    
    class Cat(Animal):
        def make_sound(self):
            return "야옹!"
    
    class Cow(Animal):
        def make_sound(self):
            return "음메!"
    
    animals = [Dog(), Cat(), Cow()]
    
    for animal in animals:
        print(animal.make_sound())
    
    # ✅ "멍멍!"
    # ✅ "야옹!"
    # ✅ "음메!"

    추상화(Abstraction) 적용 → Animal 클래스를 만들고 make_sound()를 필수 구현하도록 강제
    다형성(Polymorphism) 적용 → make_sound() 를 각각 다른 방식으로 구현


    #파이썬 #Python #OOP #객체지향프로그래밍 #추상화 #다형성 #PythonOOP #코딩공부 #파이썬강의 

    반응형
Designed by Tistory.