타닥타닥 개발자의 일상

오버라이드 VS 오버로드의 차이점 알아보기 본문

코딩 기록/유용한 IT 팁

오버라이드 VS 오버로드의 차이점 알아보기

NomadHaven 2024. 3. 3. 16:12

오버라이드(Override)와 오버로드(Overload)는 객체지향 프로그래밍에서 다형성(Polymorphism)을 구현하는 방법 중 두 가지.

1.오버라이드(Override)
   - 오버라이드는 상위 클래스(부모 클래스)에서 이미 정의된 메서드를 하위 클래스(자식 클래스)에서 동일한 시그니처(메서드 이름, 매개변수 유형 및 개수)로 다시 정의하는 것을 의미.
   - 오버라이드를 사용하면 하위 클래스는 상위 클래스의 메서드를 자신의 필요에 맞게 재정의 가능.
   - 오버라이드된 메서드는 상위 클래스의 메서드 대신 호출되며, 다형성을 통해 동일한 메서드 호출 시에도 실제 객체의 타입에 따라 다른 동작이 수행.

class Animal:
    def make_sound(self):
        return "Some generic sound"

class Dog(Animal):
    def make_sound(self):
        return "Bark bark!"

class Cat(Animal):
    def make_sound(self):
        return "Meow meow!"

# 사용 예시
dog = Dog()
cat = Cat()

print(dog.make_sound())  # "Bark bark!"
print(cat.make_sound())  # "Meow meow!"


2.오버로드(Overload)
   - 오버로드는 같은 클래스 내에서 메서드의 이름은 같지만 매개변수의 유형, 개수, 또는 순서가 다른 여러 버전을 정의하는 것.
   - 오버로드된 메서드는 메서드 이름이 같지만 시그니처가 다르므로 컴파일러가 인자의 유형을 기반으로 어떤 메서드를 호출할지 결정.
   - 오버로드된 메서드는 같은 이름을 사용하며 다양한 매개변수를 받아들일 수 있어, 코드의 가독성과 유연성을 높이는 데 사용.

class Calculator:
    def add(self, a, b):
        return a + b

    def add(self, a, b, c):
        return a + b + c

# 사용 예시
calculator = Calculator()
result1 = calculator.add(1, 2)      # 에러, 메서드 오버로드가 지원되지 않음
result2 = calculator.add(1, 2, 3)   # 정상 동작


오버라이드는 상속 관계에서 메서드를 재정의하고 다형성을 구현하는 데 사용,

오버로드는 하나의 클래스 내에서 동일한 이름의 메서드를 다양한 매개변수 조합으로 정의하여 유연성을 높이는 데 사용.

Comments