-
파이썬 배우기: 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 #코딩공부 #파이썬강의반응형'IT - 프로그래밍 > 파이썬' 카테고리의 다른 글
BeautifulSoup으로 데이터 추출하기 (0) 2025.04.26 웹 스크래핑이란? – 개념과 활용 사례 (0) 2025.03.20 파이썬 배우기: OOP 기본 – 캡슐화 및 상속 (0) 2025.03.14 파이썬 배우기: 정규 표현식(Regex) (0) 2025.03.12 파이썬 배우기: 고차 함수, 클로저 및 데코레이터 완벽 정리 (0) 2025.03.02