새소식

반응형
Programming Language/Python

[Python] 파이썬 오버라이딩(Overriding)

  • -
반응형

1. 오버라이딩


파이썬에서 오버라이딩(Overriding)은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 하위 클래스(subclass)에서 상위 클래스(superclass)의 메서드를 다시 장의 하는 것을 의미한다. 이것은 상속을 통해 부모 클래스로부터 상속받은 메서드를 하위 클래스에서 필요에 맞게 재정의할 수 있게 해 준다.
 
오버라이딩의 주요 특징은 다음과 같다.

특징 내용
상속 관계 오버라이딩은 상속 관계에서 발생하며, 하위 클래스가 상위 클래스를 다시 정의한다.
메서드 시그니처 일치 오버라이딩된 메서드의 이름, 매개변수 및 반환 유형은 원본 메서드와 정확하게 일치해야 한다.
동적 디스패치 런타임 시에 객체의 실제 형식에 따라 적절한 오버라이딩된 메서드가 호출된다. 이것은 다형성의 핵심 원리 중 하나이다.

 

2. 오버라이딩 예제


오버라이딩(Overriding) 예제를 살펴보기 위해 간단한 클래스를 사용해 보자. 아래의 코드에서는 부모 클래스와 그를 상속하는 자식 클래스를 정의하고, 자식 클래스에서 부모 클래스의 메서드를 오버라이딩한다.
 

예제 코드 1

class Animal:
    def speak(self):
        print("동물이 소리를 냅니다.")

class Dog(Animal):
    def speak(self):
        print("멍멍")

class Cat(Animal):
    def speak(self):
        print("야옹")

# 객체 생성
my_dog = Dog()
my_cat = Cat()

# 오버라이딩된 메서드 호출
my_dog.speak() 
my_cat.speak()
멍멍
야옹

실행 결과

 
Animal 클래스에는 speak 메서드가 정의되어 있고 Dog 클래스와 Cat 클래스는 각각 Animal 클래스를 상속하여, speak() 메서드를 오버라이딩하여 동작을 수행한다. my_dog와 my_cat 객체를 생성하고 각 객체의 speak() 메서드를 호출하면 각 클래스의 오버라이딩된 버전이 실행된다.
 
이것은 파이썬에서 오버라이딩을 구현하는 간단한 예제이다. 하위 클래스에서 상위 클래스의 메서드를 재정의하여 자식 클래스의 고유한 동작을 제공할 수 있다.
 
 

예제 코드 2

import math

class Shape:
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        return math.pi * self.radius ** 2

# 객체 생성
rect = Rectangle(4, 5)
circle = Circle(3)

# 각 객체의 넓이 계산 및 출력
print(f"사각형의 넓이: {rect.area()}")
print(f"원의 넓이: {circle.area()}")
사각형의 넓이: 20
원의 넓이: 28.274333882308138

실행 결과

 
Shape 클래스에는 추상 메서드 area가 정의되어 있고 이 메서드는 하위 클래스에서 오버라이딩되어야 한다. 따라서, Rectangle 및 Circle 클래스는 Shape 클래스를 상속하고, 각 클래스에서 area() 메서드를 오버라이딩하여 해당 도형의 넓이를 계산하는 동작을 제공한다. 그리고 rect와 circle 객체를 생성하고, 각 객체의 area() 메서드를 호출하여 각 도형의 넓이를 계산하고 출력한 걸 확인할 수 있다.
 
이 예제에서 오버라이딩을 사용하여 추상적인 Shape 클래스에서 파생된 클래스에서 고유한 동작을 구현하였다. 이는 객체 지향 프로그래밍의 다형성을 활용한 강력한 패턴 중 하나이다.
 
 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.