OOP 세 가지 특성: 상속과 추상화, 속성 검색 순서, 파생과 오버라이딩, 조상 클래스 접근, 초기화 메서드, super 호출 필수, 조합, 다중 상속

OOP의 세 가지 핵심 개념

객체 지향 프로그래밍의 핵심 요소는 다음과 같습니다:

  • 캡슐화
  • 상속
  • 다형성

상속의 개념

상속은 클래스 간 관계를 정의하는 메커니즘입니다. 예를 들어, "개"와 "고양이"가 "동물"이라는 공통 특성을 가질 때, 이 관계를 코드로 표현할 수 있습니다.


class Animal:
    def breathe(self):
        print("호흡 중...")

class Dog(Animal):
    def bark(self):
        print("멍멍!")

# 사용 예시
my_dog = Dog()
my_dog.breathe()  # Animal의 메서드 호출
my_dog.bark()     # Dog의 고유 메서드

추상화와 상속 절차

다양한 하위 클래스의 공통 요소를 추출하여 기본 클래스를 생성하는 과정을 추상화라고 합니다.


class Vehicle:
    def __init__(self, brand):
        self.brand = brand

class Car(Vehicle):
    def drive(self):
        print(f"{self.brand} 자동차 주행 중")

class Bike(Vehicle):
    def pedal(self):
        print(f"{self.brand} 자전거 페달링 중")

# 인스턴스 생성
my_car = Car("현대")
my_bike = Bike("삼천리")

속성 검색 순서

Python의 속성 탐색 순서는 다음과 같습니다:

  1. 인스턴스 자체
  2. 클래스 정의
  3. 부모 클래스
  4. 최상위 클래스(object)

파생과 메서드 오버라이딩

자식 클래스가 부모 클래스의 메서드를 재정의할 때를 파생(derived) 상태라고 합니다.


class Parent:
    def greet(self):
        print("부모 클래스 메서드")

class Child(Parent):
    def greet(self):
        print("자식 클래스 오버라이딩")

# 실행 결과
c = Child()
c.greet()  # "자식 클래스 오버라이딩"

super()를 통한 부모 클래스 접근

자식 클래스에서 부모 클래스의 기능을 호출할 때는 super()를 사용합니다.


class Base:
    def __init__(self, value):
        self.value = value

class Extended(Base):
    def __init__(self, value, extra):
        super().__init__(value)  # 부모 초기화 호출
        self.extra = extra

e = Extended("데이터", 42)

조합(Composition) 패턴

상속이 "is-a" 관계라면 조합은 "has-a" 관계를 표현합니다.


class Engine:
    def start(self):
        print("엔진 시동")

class Car:
    def __init__(self):
        self.engine = Engine()  # 조합 관계

my_car = Car()
my_car.engine.start()  # 구성 요소 접근

다중 상속과 MRO

Python은 여러 부모 클래스로부터 상속받는 다중 상속을 지원합니다. 메서드 해결 순서(Method Resolution Order)는 다음 규칙을 따릅니다:

  • 깊이 우선 탐색
  • 공통 조상 클래스는 마지막에 탐색

class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass

print(D.mro())  # 상속 순서 확인

태그: python OOP 상속 메서드 오버라이딩 조합

9월 12일 21:57에 게시됨