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)를 하는 능력)만 정의하면 됩니다. 이것이 바로 상속의 힘입니다. 공통 기능은 부모 클래스에 한 번만 작성하고, 자식 클래스에서 이를 재사용하면서 자신만의 특성을 추가할 수 있습니다.

치트 시트

상속을 사용하면 클래스가 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(); // Buddy makes a sound
echo $dog->fetch(); // Buddy fetches the ball

자식 클래스는 속성, 생성자, 메서드를 포함하여 부모의 모든 public 및 protected 멤버를 상속받습니다. 또한 자식 클래스는 자신만의 특화된 메서드와 속성을 추가할 수 있습니다.

상속은 코드 재사용을 촉진하고 클래스 간의 논리적 관계를 설정하여 중복을 줄이고 코드를 더 쉽게 유지 관리할 수 있도록 합니다.

직접 해보기

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

// 입력을 읽습니다
$brand = trim(fgets(STDIN));

// TODO: 브랜드명을 사용하여 Motorcycle 객체를 생성합니다

// TODO: start()의 결과를 출력합니다

// TODO: wheelie()의 결과를 출력합니다

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

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

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