python

[python] 상속

bbiyak2da 2025. 5. 28. 11:29

상속

Python의 상속(inheritance)은 기존 클래스(부모 클래스)의 기능을 그대로 물려받아 새로운 클래스를 만드는 것

 

🧬 쉽게 말하면?

상속은 붕어빵 틀을 물려받아 새 붕어빵 틀을 만드는 것이에요.
기본 붕어빵 틀(부모 클래스)에 기능을 추가하거나 바꾸는(확장, 수정) 거죠!

 


🔹 왜 상속을 사용할까?

  • 기존 클래스를 재사용하고
  • 공통 기능은 그대로, 다른 기능은 따로 추가하고 싶을 때

 

🔸 기본 예제

# 부모 클래스
class Animal:
    def sound(self):
        print("동물이 소리를 냅니다.")

# 자식 클래스 (Animal을 상속받음)
class Dog(Animal):
    def bark(self):
        print("멍멍!")

dog = Dog()
dog.sound()  # 부모 클래스 메서드 사용 가능
dog.bark()   # 자식 클래스 메서드

 

동물이 소리를 냅니다.
멍멍!

 

🔸 상속의 구조

class 자식클래스(부모클래스):
    # 추가하거나 바꾸고 싶은 내용 정의

 

🔸 메서드 오버라이딩 (기능 바꾸기)

class Animal:
    def sound(self):
        print("???")  # 기본 동물 소리

class Cat(Animal):
    def sound(self):  # 부모의 sound()를 덮어쓰기
        print("야옹~")

cat = Cat()
cat.sound()  # 출력: 야옹~

 

🔸 super() 사용하기 (부모 메서드 호출)

class Animal:
    def sound(self):
        print("기본 동물 소리")

class Bird(Animal):
    def sound(self):
        super().sound()   # 부모 클래스의 sound()도 호출
        print("짹짹!")

bird = Bird()
bird.sound()

 

기본 동물 소리
짹짹!

 

✅ 요약

상속 기존 클래스의 속성과 메서드를 물려받음
부모 클래스 상속을 제공하는 클래스
자식 클래스 상속을 받는 클래스
오버라이딩 부모의 기능을 자식이 바꾸는 것
super() 부모 클래스의 기능을 호출할 때 사용

 

실습

# 일반 유닛
class Unit:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

# 공격 유닛
class AttackUnit(Unit):
    def __init__(self, name, hp, damage):
        Unit.__init__(self, name, hp)
        self.damage = damage

    def attack(self, location):
        print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]"\
            .format(self.name, location, self.damage))
        
    def damaged(self, damage):
        print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴되었습니다.")
            
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")

# 공격 2번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)

 

파이어뱃 : 5시 방향으로 적군을 공격합니다. [공격력 16]
파이어뱃 : 25 데미지를 입었습니다.
파이어뱃 : 현재 체력은 25 입니다.
파이어뱃 : 25 데미지를 입었습니다.
파이어뱃 : 현재 체력은 0 입니다.
{0} : 파괴되었습니다.