Menu
Coddy logo textTech

parent:: 키워드

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

자식 클래스가 부모 클래스로부터 상속받을 때, 때로는 부모의 메서드나 속성에 직접 접근해야 할 필요가 있습니다. parent:: 키워드를 사용하면 자식 클래스 내에서 부모 클래스의 구현을 호출할 수 있습니다.

이것은 자식 클래스가 자신의 속성을 설정하는 동시에 부모의 속성을 초기화해야 하는 생성자에서 특히 유용합니다:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    public $breed;
    
    public function __construct($name, $breed) {
        parent::__construct($name);
        $this->breed = $breed;
    }
    
    public function describe() {
        return "$this->name is a $this->breed";
    }
}

$dog = new Dog("Max", "Labrador");
echo $dog->describe();

출력:

Max is a Labrador

parent::__construct($name)를 호출함으로써, 자식 클래스는 부모의 초기화 로직을 중복해서 작성하는 대신 재사용합니다. 이 호출이 없으면, $name 속성은 절대 설정되지 않습니다.

생성자뿐만 아니라 어떤 부모 메서드든 호출하기 위해 parent::를 사용할 수 있습니다. 이는 메서드의 동작을 완전히 대체하기보다는 확장하고 싶을 때 특히 중요해집니다.

핵심 포인트: parent:: 키워드는 부모 클래스의 구현에 접근하는 방법을 제공합니다. 이는 적절한 생성자 체이닝과 상속된 기능을 다시 작성하는 대신 그 위에 구축하는 데 필수적입니다.

challenge icon

챌린지

쉬움

자식 클래스가 parent:: 키워드를 사용하여 생성자를 적절히 연결하고 상속된 메서드를 기반으로 기능을 확장하는 방법을 보여주는 제품 카탈로그 시스템을 구축해 보겠습니다.

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

  • Product.php — 모든 제품의 기본이 되는 Product 클래스를 정의합니다. 이 클래스는 public 속성인 $name$price를 가져야 합니다. 생성자는 이름과 가격을 인자로 받아 두 속성을 설정합니다. "[name]: $[price]"를 반환하는 getDetails() 메서드를 포함하세요.
  • ElectronicProduct.phpProduct를 상속받는 ElectronicProduct 클래스를 정의합니다. 파일 상단에 Product 파일을 포함하세요. 이 클래스는 $warranty 속성(개월 단위)을 추가합니다. 생성자는 이름, 가격, 보증 기간을 인자로 받아야 합니다. parent::__construct()를 사용하여 부모 클래스를 통해 이름과 가격을 초기화한 다음, 직접 보증 기간을 설정하세요. 부모의 구현을 기반으로 하는 getDetails() 메서드를 만드세요. parent::getDetails()를 호출하고 그 뒤에 " (Warranty: [warranty] months)"를 추가합니다.
  • main.php — ElectronicProduct 파일을 포함하세요. 세 가지 입력을 받게 됩니다: 제품 이름, 가격(float으로 변환할 문자열), 보증 기간(정수로 변환할 문자열). 이 값들로 ElectronicProduct 객체를 생성하고 getDetails()를 호출한 결과를 출력하세요.

이 챌린지는 생성자 체이닝뿐만 아니라 메서드 동작을 확장하는 데 있어 parent::의 진정한 강력함을 보여줍니다. ElectronicProduct는 부모의 포맷팅 로직을 재사용하면서 그 위에 자체적인 세부 정보를 추가하여, 코드 중복을 피하면서도 더 풍부한 출력을 생성합니다.

치트 시트

parent:: 키워드를 사용하면 자식 클래스에서 부모 클래스의 메서드와 속성에 접근할 수 있습니다.

자식 클래스에서 부모의 생성자를 호출하려면 parent::__construct()를 사용하세요:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

class Dog extends Animal {
    public $breed;
    
    public function __construct($name, $breed) {
        parent::__construct($name);
        $this->breed = $breed;
    }
}

또한 parent::를 사용하여 부모 메서드를 호출하고 그 동작을 확장할 수 있습니다:

<?php
class Animal {
    public function describe() {
        return "This is an animal";
    }
}

class Dog extends Animal {
    public function describe() {
        return parent::describe() . " and it's a dog";
    }
}

이러한 방식을 통해 자식 클래스는 코드를 중복해서 작성하는 대신 부모의 로직을 재사용할 수 있으며, 적절한 생성자 체이닝(constructor chaining)과 메서드 확장이 가능해집니다.

직접 해보기

<?php
require_once 'ElectronicProduct.php';

// 입력 읽기
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));

// TODO: 입력된 값으로 ElectronicProduct를 생성하고
// getDetails() 호출 결과를 출력하세요

?>
quiz icon실력 점검

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

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