다음 코드에서 키워드의 효과는?

과목: PHP

문제 번호: 3008

hard
다음 코드에서 final 키워드의 효과는?
<?php
class Fruit {
    final public function intro() {
        echo "This is a fruit method";
    }
}

class Apple extends Fruit {
    public function intro() {  // 이 라인의 결과는?
        echo "This is an apple method";
    }
    
    public function showInfo() {
        echo "Apple info";
    }
}

$apple = new Apple();
?>
A. Apple 클래스의 intro() 메서드가 정상적으로 Fruit의 메서드를 오버라이딩함
B. 상속은 가능하지만 intro() 메서드 오버라이딩 시도로 인해 Fatal Error 발생
C. Apple 클래스 자체를 정의할 수 없어서 오류 발생
D. 경고만 발생하고 Apple의 intro() 메서드가 실행됨

정답: B



final 키워드는 상속과 오버라이딩을 제한하는 중요한 기능을 제공합니다.

final 키워드의 두 가지 사용법:

1. 메서드에 사용 (final public function intro())
⦁ 해당 메서드의 오버라이딩을 금지
⦁ 상속은 가능하지만 해당 메서드는 재정의할 수 없음
⦁ 오버라이딩 시도 시 Fatal Error 발생

2. 클래스에 사용 (final class ClassName)
⦁ 해당 클래스의 상속 자체를 금지
⦁ 다른 클래스가 이 클래스를 extends할 수 없음

이 코드의 문제점:
⦁ Fruit 클래스의 intro() 메서드가 final로 선언됨
⦁ Apple 클래스에서 동일한 이름의 메서드를 정의하려고 시도
⦁ PHP는 이를 오버라이딩 시도로 간주하여 Fatal Error 발생

올바른 해결책:

Apple 클래스에서는 intro() 메서드를 재정의하지 말고, 다른 이름의 메서드를 사용하거나 부모의 메서드를 그대로 사용해야 합니다.

💡 학습 팁

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