본문 바로가기

코딩

오버라이딩; Overriding

728x90
반응형

~ riding, 타다

Overriding이란 무엇인가?

"Overriding(오버라이딩)"은 객체 지향 프로그래밍(OOP)에서 자주 사용되는 개념이다. 이를 알기 쉽게 설명하면, 부모 클래스에서 정의한 메서드를 자식 클래스가 재정의하여 덮어쓰는 것을 의미한다.

예를 들어, 부모가 자식에게 "어떻게 걷는지" 가르쳤지만, 자식이 자기 방식으로 걷기를 배우고 싶어서 기존 가르침을 바꾸는 상황과 비슷하다.


Overriding의 개념

오버라이딩은 상속(Inheritance) 관계에서만 사용된다. 자식 클래스는 부모 클래스의 모든 메서드와 속성을 그대로 물려받지만, 특정 메서드의 동작이 마음에 들지 않거나 자신만의 방식으로 동작하게 만들고 싶을 때 이를 재정의(Overriding)한다.

주요 특징:

  1. 메서드 이름 동일: 오버라이딩하려는 메서드는 부모 클래스와 이름매개변수가 동일해야 한다.
  2. 재정의: 부모의 메서드를 완전히 무시하고 새로운 동작으로 덮어쓴다.
  3. 동적 바인딩: 런타임 시점에 어떤 메서드가 호출될지 결정되며, 이를 통해 다형성을 구현한다.

Python에서 Overriding 예제

기본 예제

아래는 부모 클래스 Animalspeak 메서드를 자식 클래스에서 오버라이딩하는 예제다.

class Animal:
    def speak(self):
        return "동물이 소리를 낸다"

class Dog(Animal):
    def speak(self):
        return "멍멍!"

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

# 사용
animal = Animal()
dog = Dog()
cat = Cat()

print(animal.speak())  # 출력: 동물이 소리를 낸다
print(dog.speak())     # 출력: 멍멍!
print(cat.speak())     # 출력: 야옹!

 

위 코드에서 Dog와 Cat 클래스는 부모 클래스 Animal의 speak 메서드를 재정의(Overriding)하여 각각 "멍멍!"과 "야옹!"을 반환한다.


Overriding과 부모 메서드 호출

오버라이딩을 하더라도 부모 클래스의 메서드를 호출하고 싶을 때가 있다. 이런 경우 super()를 사용하면 된다.

super()를 이용한 부모 메서드 호출

class Animal:
    def speak(self):
        return "동물이 소리를 낸다"

class Dog(Animal):
    def speak(self):
        parent_speak = super().speak()  # 부모의 speak 호출
        return f"{parent_speak} 멍멍!"

# 사용
dog = Dog()
print(dog.speak())  # 출력: 동물이 소리를 낸다 멍멍!

 

여기서 super().speak()는 부모 클래스의 메서드를 호출하며, 이를 활용해 부모 메서드의 동작을 일부 유지하면서 새로운 동작을 추가할 수 있다.


Overriding vs Overloading

혼동하기 쉬운 개념으로 **Overloading(오버로딩)**이 있다. 두 개념은 완전히 다르다.

 


Overriding의 장점

  1. 다형성 구현
    • 같은 이름의 메서드가 상황에 따라 다르게 동작하게 만들어 유연한 설계를 가능하게 한다.
  2. 코드 재사용성
    • 부모 클래스의 기본 기능을 유지하면서 필요한 부분만 변경할 수 있다.
  3. 확장성
    • 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다.

기억하기 쉽게 암기하는 방법

"오버라이딩(Overriding)"을 이렇게 외워보자:

  • Over = "덮어쓰기"
  • Riding = "타고 가다"

즉, 부모 클래스의 기능 위에 자식 클래스의 기능으로 덮어쓴다는 뜻이다.


결론

오버라이딩은 객체 지향 프로그래밍에서 코드의 재사용성과 확장성을 높이는 핵심 개념이다. 부모 클래스의 메서드를 원하는 대로 재정의할 수 있어 코드의 유연성과 가독성을 높이는 데 큰 도움을 준다. 파이썬에서 상속과 함께 오버라이딩을 잘 활용하면 보다 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있다.

728x90
반응형

'코딩' 카테고리의 다른 글

세션; Session  (2) 2024.12.13
인증과 권한; Authentication and Permissions  (0) 2024.12.12
Enhancements; 프로그램 개선사항  (0) 2024.12.12
데코레이터; 가마솥에 온도계를 꽂다  (1) 2024.12.12
Codeium  (3) 2024.12.12