00 개요
- 자바 및 파이썬의 클래스, 메소드에 대해 공부하고 있는데 '메소드 오버라이드 가능'이라는 개념에 대한 정리
01 메소드 오버라이드 (Method Override)란
1. 정의
- 객체 지향 프로그래밍에서 자식 클래스가 부모 클래스에서 상속받은 메소드를 재정의하는 것을 의미
- 즉, 자식 클래스에서 부모 클래스의 메소드를 같은 이름, 같은 매개변수 목록으로 다시 정의하여 기능을 변경하거나 확장하는 것
2. 특징
1) 메소드 이름과 매개변수
- 오버라이드된 메소드는 부모 클래스의 메소드와 같은 이름과 같은 매개변수 목록을 가져야 됨
2) 부모 클래스의 구현을 대체
- 자식 클래스에서 해당 메소드를 호출할 때, 부모 클래스의 메소드가 아닌 자식 클래스에서 정의한 메소드가 실행됨
3) 다형성 지원
- 오버라이드는 다형성을 통해 같은 메소드 이름을 사용하더라도 객체의 종류에 따라 다른 구현을 제공할 수 있음
- 다형성(Polymorphism)이란:
- 정의: 객체 지향 프로그래밍의 중요한 개념 중 하나로, 같은 이름의 메소드가 다양한 객체에 대해 다른 행동을 할 수 있도록 하는 것. 오버라이드는 다형성을 구현하는 한 가지 방법
- 오버라이드를 통한 다형성의 의미:
- 1) 같은 메소드 이름: 여러 클래스에서 같은 이름의 메소드를 정의
- 2) 객체의 종류에 따라 다른 구현: 각 클래스에서 해당 메소드를 오버라이드하여 서로 다른 동작을 구현
- 3) 동적 바인딩: 프로그램 실행 중 객체의 타입에 따라 적절한 메소드가 선택되어 호출됨
3. 예시
1) 파이썬
# 부모 클래스 정의
class Animal:
def sound(self):
print("Animal makes a sound")
# 자식 클래스 Cat 정의
class Cat(Animal):
def sound(self): # 부모 클래스의 메소드를 오버라이드
print("Cat meows")
# 자식 클래스 Cow 정의
class Cow(Animal):
def sound(self): # 부모 클래스의 메소드를 오버라이드
print("Cow moos")
# 메인 실행 부분
if __name__ == "__main__":
# Animal 타입의 리스트에 다양한 동물 객체 추가
animals = [Cat(), Cow()]
# 각 동물의 소리 출력
for animal in animals:
animal.sound() # 각 객체에 맞는 sound() 메소드 호출
# 실행 결과
Cat meows
Cow moos
- 설명:
- 부모 클래스 Animal: 일반적인 동물 소리를 출력하는 sound() 메소드를 정의함
- 자식 클래스 Cat, Cow: 각각의 클래스에서 sound() 메소드를 오버라이드하여 고유한 소리를 출력하도록 구현함
- 다형성 구현:
- animals 리스트에 서로 다른 종류의 동물 객체를 추가함
- for 루프를 통해 animals 리스트를 순회하며, 각 객체에 대해 sound() 메소드를 호출
- 이때 각 객체의 실제 타입에 맞는 오버라이드된 메소드가 실행됨
2) 자바
public class practiseOverride {
public static void main(String[] args) {
// Animal 타입의 배열에 다양한 동물 객체 추가
Animal[] animals = { new Cat(), new Dog() };
// 각 동물의 소리 출력
for (Animal animal : animals) {
animal.sound(); // 각 객체에 맞는 sound() 메소드 호출
}
}
static class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
static class Cat extends Animal {
@Override
void sound() {
System.out.println("Cat meows");
}
}
static class Dog extends Animal {
@Override
void sound() {
System.out.println("Dog barks");
}
}
}
- 설명:
- 부모 클래스 Animal: 일반적인 동물 소리를 출력하는 sound() 메소드를 정의함
- 자식 클래스 Cat, Dog: 각각의 클래스에서 sound() 메소드를 오버라이드하여 고유한 소리를 출력하도록 구현함
- 다형성 구현:
- 맨 위에 main()에서
- Animal 타입의 배열에 Cat과 Cow 객체를 추가함
- for-each 루프를 통해 배열을 순회하며 각 동물의 sound() 메소드를 호출하여 고유의 소리를 출력함
- 맨 위에 main()에서
4. 결론
- 오버라이드를 통해 부모 클래스의 메소드를 자식 클래스에서 재정의하여, 각 클래스의 고유한 기능을 구현할 수 있음
- 오버라이드는 객체 지향 프로그래밍에서 코드의 재사용성과 확장성을 높이는 중요한 개념
'Python > 기본문법' 카테고리의 다른 글
리스트 내 중복값 제거하기 (Python) (0) | 2024.11.25 |
---|---|
zip() (파이썬 함수) (0) | 2024.09.30 |
Decimal (파이썬 데이터 타입) (0) | 2024.09.02 |
f.tell() (파이썬 파일 처리 함수) (0) | 2024.08.09 |
f.seek() (파이썬 파일 처리 함수) (0) | 2024.08.09 |