객체 지향 프로그래밍에서 상속은 코드 재사용 및 확장을 위한 핵심 메커니즘입니다. 상속을 통해 하위 클래스는 동일한 논리를 다시 작성할 필요 없이 상위 클래스의 기존 속성과 메서드를 직접 사용할 수 있으므로 코드 구조가 더욱 간결하고 효율적이게 됩니다.
class Person {
protected $name;
protected $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function getName() {
return $this->name;
}
public function getAge() {
return $this->age;
}
}
class Student extends Person {
private $school;
public function __construct($name, $age, $school) {
parent::__construct($name, $age);
$this->school = $school;
}
public function getSchool() {
return $this->school;
}
}
$student = new Student("John Doe", 20, "Harvard University");
echo $student->getName(); // John Doe
echo $student->getAge(); // 20
echo $student->getSchool(); // Harvard University위의 예에서 부모 클래스인 Person 클래스는 기본 속성과 메서드를 제공하고 Student 클래스는 상속을 통해 부모 클래스 기능을 확장하고 새 속성 $school 을 추가합니다. 이러한 방식으로 하위 클래스는 상위 클래스의 논리를 재사용할 뿐만 아니라 자체 동작을 유연하게 확장할 수도 있습니다.
다형성을 통해 다양한 클래스가 동일한 메소드 인터페이스를 다양한 방식으로 구현할 수 있으므로 프로그램이 더욱 유연하고 확장 가능해집니다. PHP에서 다형성은 일반적으로 메소드 오버라이드(Override)를 통해 구현됩니다.
class Animal {
protected $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function speak() {
echo "Animal speaks.";
}
}
class Cat extends Animal {
public function speak() {
echo "Meow!";
}
}
class Dog extends Animal {
public function speak() {
echo "Woof!";
}
}
$animals = [new Cat("Kitty"), new Dog("Buddy")];
foreach ($animals as $animal) {
echo $animal->getName() . ": ";
$animal->speak();
echo "<br>";
}위의 예는 다형성이 실제로 작동하는 모습을 보여줍니다. Cat 및 Dog 클래스는 모두 Animal에서 상속되지만 각각 talk() 메서드를 재정의합니다. 이 메소드를 호출하면 실제 객체 유형에 따라 다른 결과가 출력되므로 다형성의 유연성을 반영합니다.
실제 프로젝트에서 상속과 다형성은 코드의 유지 관리성과 확장성을 크게 향상시킬 수 있습니다. 일반적인 애플리케이션 시나리오는 다음과 같습니다.
상속과 다형성은 PHP 객체 지향 프로그래밍의 중요한 지원 포인트입니다. 상속을 통해 코드를 모듈화하고 재사용할 수 있으며, 다형성을 통해 프로그램은 유연한 확장 기능을 가질 수 있습니다. 이 두 가지 기능을 이해하고 익히면 개발자는 읽기 쉽고 유지 관리가 가능하며 확장 가능한 애플리케이션을 구축하는 데 도움이 될 수 있습니다.