Python/python

오버로딩 & 오버라이딩(Overloading & Overriding)

알면 알 수록 재밌다! 2023. 7. 14. 14:40
# 오버 로딩

오버로딩은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것을 말합니다. 
오버로딩을 사용하면 같은 이름의 메서드를 다양한 매개변수 형식이나 개수로 정의할 수 있습니다. 
매개변수의 타입, 개수, 순서 등이 다르면 컴파일러는 각각의 오버로딩된 메서드를 구별하고 호출할 수 있게 됩니다.

* 오버로딩의 핵심 아이디어는 동일한 이름의 메서드를 사용하여 비슷한 작업을 다루는 다양한 시나리오를 처리하는 것이다.
오버로딩은 코드의 가독성과 재사용성을 높일 수 있지만, 
파이썬은 자체적으로 메서드 오버로딩을 지원하지 않기 때문에 기본값 설정, 가변 인자, 키워드 인자 등을 
활용하여 비슷하게 사용할 수 있다.

 

예시)

from multipledispatch import dispatch


class Shape:
    @dispatch()
    def area(self):
        pass

    @dispatch(int, int)
    def area(self, length, width):
        return length * width

    @dispatch(float)
    def area(self, radius):
        return 3.14 * radius * radius


shape = Shape()

result1 = shape.area()
print(result1)

result2 = shape.area(5, 6) 
print(result2) 

result3 = shape.area(4.5)
print(result3)

파이썬은 공식적으로 지원하지는 않기 때문에 multipledispatch 패키지를 설치하고 이를 나타낼 수 있다.

 


 

# 오버 라이딩

오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말합니다. 
자식 클래스는 부모 클래스로부터 상속받은 메서드를 동일한 이름으로 다시 구현하여 
부모 클래스의 동작을 변경하거나 확장할 수 있습니다.

* 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 자신에게 맞게 재정의할 수 있다. 
이를 통해 다형성을 구현하고, 객체의 타입에 따라 동일한 메서드를 호출했을 때 각 객체의 구체적인 동작이 수행된다.

 

예시)

class Animal:
    def make_sound(self):
        print("Animal makes a sound")

class Cat(Animal):
    def make_sound(self):
        print("Cat meows")

class Dog(Animal):
    def make_sound(self):
        print("Dog barks")

 


요약)

오버라이드는 상속 받은걸 새로운 내용으로 덮어씌우는 것

오버로딩은 상속이랑은 상관없고 같은 클래스 내의 같은 이름의 메서드를 호출할 때 매개변수등을 통해 다르게 호출해서 원하는 메서드를 불러 내는것