본문 바로가기

python 시작하기

python 클래스 상속, 다향성

728x90
반응형

저번 포스팅에서는 클래스에 대해서 배웠으니 이제 클래스의 기능을 알아보아야겠죠?

클래스의 기능에는 크게 3종류가 있습니다.

  • 상속 : 클래스를 정의할 때 이미 구현된 클래스를 상속 받아서 속성이나 기능이 확장되는 클래스를 구현함
  • 다향성 : 동일한 이름의 메서드가 객체의 타입에 따라 다르게 동작하는 것을 말함
  • 추상화 : 복잡한 시스템의 세부 사항을 감추고, 필요한 부분만 노출함으로써 코드를 더 간단하고 명확하게 작성

상속

<상속>

  • 기존의 클래스가 가지고 있는 필드와 메서드를 그대로 물려받는 새로운 클래스를 만드는 것
  • 새로운 클래스에서 필드, 메서드 추가 가능
  • 공통점을 가진 내용을 상위 클래스에 둬서 일관되고 효율적인 코딩 가능
  • 부모(슈퍼) 클래스, 자식(서브) 클래스
    • ex)국가 클래스 (부모), 한국,일본, 중국(자식)
  • 자식 클래스를 선언할 때 소괄호로 부모 클래스 포함시키기

이제 상속에 개념이 잡히지 않습니까?

아 참고로 부모 클래스에 생성자가 없으면, 자식클래스에서도 별도의 생성자를 구현하지 않아도 부모 클래스의 속성과 메서드를 바로 사용가능합니다.

만약 부모클래스에 생성자가 있을경우에는 자식 클래스에 생성자에서

super().__init__(호출 생성자)

로 명시적으로 호출해주어야 합니다. self는 생략가능!

주의!!!

자식클래스의 생성자 매개변수를 꼭 부모 클래스와 동일하게 안해도 되지만, 사용시에는 self.변수명으로 사용해주어야 합니다.

그럼 간단한 실습을 해봅시다.

 

실습(부모클래스, 자식클래스)

  • 부모 클래스(Animal)을 선언
  • 동물소리 메서드와, 움직임 메서드 선언
  • 자식 클래스 (Dog)선언
  • 강아지가 멍멍 짓습니다. 출력

<해답 예시>

이쯤 되면 한 부모당 한 자식만 상속 받을 수 있나? 라는 의문이 생길 수도 있습니다.

아닙니다. 하나의 자식클래스가 여러 부모 클래스를 상속 받을 수 있습니다.

예시

예시르 보시면 어 하고 뭔가 달라진점이 있지 않으싶니까?

맞습니다. super()라는 호출 메서드가 사라지고 부모 클래스의 명이 들어가 있고, 또 self가 생략가능하다고 했는데 여기서는 사용되었습니다. 

다중상속에서는 어디에서 상속받아야 하는지 알아야 하기 때문에 부모클래스 명이 사용되며, 명시적으로 호출이기 때문에 self가 필요합니다.

여기까지 따라 오셨다면 조금더 심화해보죠

다향성

  • 다형성은 동일한 이름의 메서드가 객체의 타입에 따라 다르게 동작하는 것을 말함
  • 주로 상속 관계에서 메서드 동작을 변경
  • 다형성을 실현하는 기법중 하나로 오버라이딩이 존재

오버라이딩?

  • 메서드 재정의(Method Overriding)
  • 상속된 메서드의 내용이 자식 클래스에 맞지 않을 경우, 자식 클래스에서 동일한 메서드를 재정의 하는 것
  • 즉, 자식 클래스는 부모 클래스의 기본 동작을 변경하거나 확장할 수 있음
  • super().메서드명을 사용하여 자식 클래스에서 부모 클래스의 메서드를 호출 할 수있음
  • 오버라이딩한 메서드는 부모 메서드의 매개변수 개수와 동일하게 사용하는 것을 권장

 

이제 쿨타임이 찼다고 하죠 어려운 코드 한번 해봅시다.

실습. 상속과 오버라이딩

class Product:
    def __init__(self, name, price, quantity):
        self.name = name
        self.price = price
        self.quantity = quantity

    # 재고 업데이트 메서드
    def update_quantity(self, amount):
        self.quantity += amount
        print(
            f"{self.name} 재고가 {amount}만큼 {'증가' if amount > 0 else '감소'}했습니다. 현재 재고: {self.quantity}")

    # 상품 정보 출력 메서드
    def display_info(self):
        print(f"상품명: {self.name}")
        print(f"가격: {self.price}")
        print(f"재고: {self.quantity}")
  • 주어진 부모클래스를 바탕으로 조건을 만족하는 자식 클래스 Electronic클래스와 Food클래스를 설계하여 보세요
  • 결과

 

실습 해답예시는 이제 하루코딩에 올려놓았으니 참고부탁드립니다.

다음 포스팅은 이제 클래스 추상화에 대해서 알아보겠습니다.

다음 실습은 조금더 난이도가 있으니 이번 포스팅에 개념을 충분히 숙지하시고 오셔야합니다!!!!

오늘도 같이 공부하시느라 수고 많으셨습니다!!!!!!

반응형