Menu
Coddy logo textTech

parent:: 키워드

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

자식 class가 부모 parent로부터 상속될 때, 때로는 parent의 메서드나 properties에 직접 액세스해야 합니다. parent:: 키워드를 사용하면 자식 class 내부에서 parent class의 구현을 호출할 수 있습니다.

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

<?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::를 사용하면 생성자뿐만 아니라 모든 부모 method를 호출할 수 있습니다. 이는 method를 완전히 대체하는 대신 해당 method의 동작을 확장하려는 경우에 특히 중요합니다.

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

challenge icon

챌린지

쉬움

parent:: 키워드를 사용하여 자식 클래스가 부모 클래스의 기능을 확장하고, constructor를 올바르게 연결하며 상속된 method를 기반으로 기능을 확장하는 방식을 보여 주는 product catalog system을 만들어 보겠습니다.

코드를 세 개의 파일로 구성합니다:

  • Product.php: 모든 product의 base 역할을 하는 Product class를 Define합니다. $name$price public properties를 가져야 합니다. constructor는 name과 price를 accepts하고 두 properties를 설정합니다. getDetails() method를 포함하며, 이 method는 "[name]: $[price]"를 returns해야 합니다.
  • ElectronicProduct.php: Product를 extends하는 ElectronicProduct class를 Define합니다. 파일의 맨 위에서 Product 파일을 포함합니다. 이 class는 $warranty property(개월 단위)를 추가합니다. constructor는 name, price, warranty를 accepts해야 합니다. parent::__construct()를 사용하여 parent를 통해 name과 price를 initialize한 다음 warranty를 yourself 설정합니다. parent의 구현을 기반으로 동작하는 getDetails() method를 Create합니다. parent::getDetails()를 calling하고 " (Warranty: [warranty] months)"를 뒤에 추가합니다.
  • main.php: ElectronicProduct 파일을 포함합니다. 세 개의 inputs를 받습니다: product name, price(float으로 변환할 string), warranty period(integer로 변환할 string)입니다. 이러한 values로 ElectronicProduct를 Create하고 getDetails()를 calling한 result를 print합니다.

이 challenge는 parent::의 진정한 power를 보여 줍니다. constructor chaining뿐만 아니라 method behavior를 확장하는 데에도 사용할 수 있습니다. ElectronicProduct는 parent의 formatting logic을 재사용하고 자체 details를 그 위에 추가하므로, code duplication을 피하면서 더욱 풍부한 output을 만들 수 있습니다.

직접 해보기

<?php
require_once 'ElectronicProduct.php';

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

// TODO: 입력 값으로 ElectronicProduct 생성
// 그리고 getDetails() 호출 결과 출력

?>
quiz icon실력 점검

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

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

직접 연습해 보세요: 온라인 PHP 컴파일러