-
Notifications
You must be signed in to change notification settings - Fork 0
KR_Inheritance
somaz edited this page Apr 21, 2025
·
3 revisions
클래스 간의 코드 재사용을 위한 메커니즘입니다.
# 기본 상속
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return f"{self.name}가 멍멍!"
class Cat(Animal):
def speak(self):
return f"{self.name}가 야옹!"
dog = Dog("멍멍이")
print(dog.speak()) # 멍멍이가 멍멍!✅ 특징:
- 코드 재사용
- 메서드 오버라이딩
- 계층 구조
class Flying:
def fly(self):
return "날 수 있음"
class Swimming:
def swim(self):
return "수영할 수 있음"
class Duck(Flying, Swimming):
def __init__(self, name):
self.name = name✅ 특징:
- 여러 클래스 상속
- 기능 조합
- MRO 고려
class Parent:
def __init__(self, name):
self.name = name
def greet(self):
return f"안녕, 나는 {self.name}"
class Child(Parent):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def greet(self):
return super().greet() + f", {self.age}살이야"✅ 특징:
- 부모 클래스 메서드 호출
- 초기화 체인
- 메서드 확장
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.width + self.height)✅ 특징:
- 인터페이스 정의
- 구현 강제
- 설계 명확화
class JSONMixin:
def to_json(self):
import json
return json.dumps(self.__dict__)
class User(JSONMixin):
def __init__(self, name, age):
self.name = name
self.age = age
user = User("홍길동", 30)
print(user.to_json()) # {"name": "홍길동", "age": 30}✅ 특징:
- 기능 재사용
- 코드 모듈화
- 유연한 확장
✅ 모범 사례:
- 단일 상속 우선 사용
- 다중 상속 시 MRO 고려
- 추상 클래스로 인터페이스 정의
- super() 활용하여 부모 클래스 메서드 호출
- 적절한 메서드 오버라이딩으로 다형성 구현
- 믹스인으로 기능 확장
- 타입 검사 활용 (isinstance, issubclass)
- 명확한 계층 구조 설계