Menu
Coddy logo textTech

상속 기초

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 21번째.

상속을 사용하면 한 클래스가 다른 클래스로부터 속성과 메서드를 물려받을 수 있습니다. 동일한 코드를 다시 작성하는 대신, 공유 기능을 가진 기본 클래스를 만들고 다른 클래스가 이를 상속받게 할 수 있습니다.

상속을 해주는 클래스를 부모 클래스(또는 기반 클래스)라고 하며, 상속을 받는 클래스를 자식 클래스라고 합니다. 이 관계를 설정하기 위해 extends 키워드를 사용합니다:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function speak() {
        return "$this->name makes a sound";
    }
}

class Dog extends Animal {
    public function fetch() {
        return "$this->name fetches the ball";
    }
}

$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();

출력:

Buddy makes a sound
Buddy fetches the ball

Dog 클래스는 Animal로부터 $name 속성, 생성자, 그리고 speak() 메서드에 자동으로 접근할 수 있습니다. 또한 개들만 가지고 있는 자체 fetch() 메서드를 정의합니다.

이것은 명확한 계층 구조를 만듭니다. 모든 개는 동물이므로 DogAnimal로부터 상속받는 것이 타당합니다. 자식 클래스는 부모의 모든 것을 사용하면서 자신만의 특화된 동작을 추가할 수 있습니다.

핵심 포인트: 상속은 코드 재사용을 촉진하고 클래스 간의 논리적 관계를 설정합니다. 자식 클래스는 부모로부터 모든 public 및 protected 멤버를 상속받아, 중복을 줄이고 코드를 더 쉽게 유지 관리할 수 있게 해줍니다.

challenge icon

챌린지

쉬움

상속을 통해 자식 클래스가 부모 클래스의 기능을 공유하면서 자신만의 특화된 동작을 추가하는 방법을 보여주는 차량 계층 시스템을 구축해 보겠습니다.

코드는 다음 세 개의 파일로 구성됩니다:

  • Vehicle.php — 모든 차량의 부모 역할을 하는 Vehicle 클래스를 정의합니다. 이 클래스는 public $brand 속성과 브랜드를 받아 설정하는 생성자를 가져야 합니다. "[brand] is starting"을 반환하는 start() 메서드와 "[brand] is stopping"을 반환하는 stop() 메서드를 포함하세요.
  • Motorcycle.phpVehicle을 상속받는 Motorcycle 클래스를 정의합니다. 파일 상단에 Vehicle 파일을 포함(include)하세요. Motorcycle 클래스는 부모의 생성자를 상속받으므로 별도의 생성자가 필요하지 않습니다. 모터사이클만의 고유한 동작인 "[brand] is doing a wheelie!"를 반환하는 wheelie() 메서드를 추가하세요.
  • main.php — Motorcycle 파일(이미 Vehicle을 포함하고 있음)을 포함하세요. 입력으로 모터사이클 브랜드 하나를 받게 됩니다. 이 브랜드로 Motorcycle 객체를 생성하세요. start(), wheelie(), stop() 메서드를 차례로 호출한 결과를 각각 별도의 줄에 출력하세요.

Motorcycle 클래스가 Vehicle로부터 $brand 속성, 생성자, 그리고 start()stop() 메서드를 어떻게 자동으로 상속받는지 주목해 보세요. 자식 클래스는 윌리(wheelie)를 하는 능력과 같이 자신을 특별하게 만드는 요소만 정의하면 됩니다. 이것이 상속의 힘입니다. 공통 기능은 부모 클래스에 한 번만 작성하고, 자식 클래스에서 이를 재사용하면서 자신만의 특성을 추가할 수 있습니다.

직접 해보기

<?php
// Motorcycle 클래스 포함 (Vehicle 클래스를 이미 포함하고 있음)
require_once 'Motorcycle.php';

// 입력 읽기
$brand = trim(fgets(STDIN));

// TODO: brand를 사용하여 Motorcycle 객체 생성

// TODO: start()의 결과 출력

// TODO: wheelie()의 결과 출력

// TODO: stop()의 결과 출력
?>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨