Python - 문제 미리보기

문제 2055

medium
다음 코드의 실행 결과는? ```python class Animal: def __init__(self, name): self.name = name def speak(self): print(f"{self.name}이(가) 소리를 냅니다") class Dog(Animal): pass class Cat(Animal): def speak(self): print(f"{self.name}이(가) 야옹하고 웁니다") dog = Dog("멍멍이") cat = Cat("야옹이") dog.speak() cat.speak() ```
A. 멍멍이이(가) 소리를 냅니다 / 야옹이이(가) 소리를 냅니다
B. 멍멍이이(가) 소리를 냅니다 / 야옹이이(가) 야옹하고 웁니다
C. 오류 발생
D. 아무것도 출력되지 않음

정답: B

메서드 상속과 오버라이딩: 상속의 기본 원리: ⦁ 자동 상속: 자식 클래스는 부모의 모든 메서드를 자동으로 물려받음 ⦁ 오버라이딩: 자식에서 같은 이름의 메서드를 재정의하면 부모 메서드를 대체 코드 실행 과정 분석: Dog 클래스: ```python class Dog(Animal): pass # 아무것도 재정의하지 않음 ``` ⦁ 상속만: `Animal`의 모든 메서드를 그대로 사용 ⦁ `speak()` 메서드: 부모인 `Animal`의 `speak()` 메서드 사용 Cat 클래스: ```python class Cat(Animal): def speak(self): # 부모의 speak() 메서드를 오버라이딩 print(f"{self.name}이(가) 야옹하고 웁니다") ``` ⦁ 오버라이딩: 부모의 `speak()` 메서드를 자신만의 버전으로 재정의 ⦁ 우선순위: 자식 클래스의 메서드가 부모 메서드보다 우선 객체 생성 및 메서드 호출: ```python dog = Dog("멍멍이") # Dog 객체 생성 cat = Cat("야옹이") # Cat 객체 생성 dog.speak() # Dog에 speak()가 없으므로 → Animal.speak() 호출 # 결과: "멍멍이이(가) 소리를 냅니다" cat.speak() # Cat에 speak()가 있으므로 → Cat.speak() 호출 # 결과: "야옹이이(가) 야옹하고 웁니다" ```

💡 학습 팁

이 문제를 포함한 Python 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.