728x90
PHP로 객체 지향 프로그래밍을 하다보면 비슷한 기능과 속성을 가진 클래스를 만들어야 할 때가 있습니다.
이번 예제는 강아지 클래스, 고양이 클래스 만들고 속성과 행동을 만들어 보겟습니다.
공통의 기능을 수정해야 할 때 관련된 클래스를 일일이 수정하는 불편함을 줄여줍니다.
그럼 상속은 무엇일까요?
부모 클래스의 속성, 행동을 자식 클래스가 물려받아 사용 할 수 있게 하는 기능입니다.
자식클래슨느 부모의 모든 것을 물려받아 자신만의 새로운 기능을 추가하거나 물려받은 기능을 자신에게 맞게 재정의(오버라이딩)을 할 수도 있습니다.
예제코드
<?php
class Animal
{
public $name;
public function __construct($name)
{
$this->name = $name;
}
public function cry()
{
echo "{$this->name} is crying with an unknown sound.<br>";
}
public function eat()
{
echo "{$this->name} is eating.<br>";
}
}
class Dog extends Animal
{
// 부모의 cry() 메소드를 재정의 (오버라이딩)
public function cry()
{
echo "{$this->name} is barking! 멍멍!<br>";
}
// 부모의 eat() 메소드를 확장
public function eat()
{
parent::eat(); // 먼저 부모의 eat() 메소드를 그대로 실행
echo "기분이 좋은지 꼬리를 흔듭니다!!<br>"; // 그리고 자신만의 기능을 추가
}
}
class Cat extends Animal
{
// 부모의 cry() 메소드를 재정의 (오버라이딩)
public function cry()
{
echo "{$this->name} is meowing! 야옹!<br>";
}
}
// 위 클래스 코드 아래에 추가
$dog = new Dog("바둑이");
$cat = new Cat("나비");
$dog->cry(); // Animal 클래스의 cry() 메소드 호출
$dog->eat(); // Animal 클래스의 eat() 메소드 호출
$cat->cry(); // Animal 클래스의 cry() 메소드 호출
$cat->eat(); // Animal 클래스의 eat() 메소드 호출
?>
시연화면
이 부분에서 부모 클래스에서 울다의 행동(메서드)를 다시 재정의 했습니다.
// 부모의 cry() 메소드를 재정의 (오버라이딩)
public function cry()
{
echo "{$this->name} is barking! 멍멍!<br>";
}
// 부모의 cry() 메소드를 재정의 (오버라이딩)
public function cry()
{
echo "{$this->name} is meowing! 야옹!<br>";
}
이 부분에서는 부모의 원래 기능을 덮어쓰는 대신 확장을 한 부분입니다. 강아지는 다른 동물처럼 먹기도하지만 특별히 꼬리를 흔드는 행동을 추가한것 입니다.
// 부모의 eat() 메소드를 확장
public function eat()
{
parent::eat(); // 먼저 부모의 eat() 메소드를 그대로 실행
echo "기분이 좋은지 꼬리를 흔듭니다!!<br>"; // 그리고 자신만의 기능을 추가
}
parent::eat()를 통해 부모의 기능을 그대로 실행하고, 그 뒤에 자식만의 새로운 기능을 덧붙였습니다.
이 parent::는 특히 부모 클래스의 생성자(__construct)를 호출할 때 사용됩니다.
'PHP' 카테고리의 다른 글
[PHP] __clone() 메소드: 객체 복사 시 발생하는 문제와 해결법 (0) | 2025.09.19 |
---|---|
[PHP] nullsafe 연산자 (?->): null 체크 지옥에서 벗어나기 (0) | 2025.09.12 |
[PHP] strtotime()으로 자연어 날짜 처리하기 (0) | 2025.09.09 |
[PHP] switch 문을 대체하는 match 표현식 (0) | 2025.09.05 |
[PHP] strpos(), strrpos()로 특정 문자의 위치 찾기 (1) | 2025.09.01 |