PHP 객체지향 프로그래밍에서 인터페이스 내 생성자 선언

인터페이스 내에서도 클래스의 생성자를 선언할 수 있습니다. 예제를 통해 살펴보겠습니다. 우리가 Rectangle 클래스를 만들기로 결정했다고 가정해 보겠습니다. 이 클래스에는 넓이와 둘레를 구하는 메서드와 두 개의 매개변수를 받는 생성자가 포함될 것입니다. 인터페이스를 사용하여 우리의 클래스를 정의해 봅시다:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // 두 매개변수를 가진 생성자
    public function getSquare();
    public function getPerimeter();
  }
?>

이제 iRectangle 인터페이스의 구현을 작성해 봅시다:

Rectangle.php<?php
  class Rectangle implements iRectangle
  {
    private $a;
    private $b;
    
    public function __construct($a, $b)
    {
      $this->a = $a;
      $this->b = $b;
    }
    
    public function getSquare()
    {
      return $this->a * $this->b;
    }
    
    public function getPerimeter()
    {
      return 2 * ($this->a + $this->b);
    }
  }
?>

인터페이스에 생성자를 선언하는 것이 우리에게 무엇을 가져다주었나요? 첫째, 클래스에서 생성자를 구현하는 것을 잊지 않게 됩니다. 둘째, 인터페이스는 클래스의 생성자가 정확히 두 개의 매개변수를 받아야 한다는 것을 명시적으로 지정합니다. 이는 또한 우리를 우발적인 오류로부터 보호해 줍니다.

왜 우리는 생성자를 Figure 인터페이스에 추가하지 않고 별도의 iRectangle 인터페이스를 만들었을까요? 모든 도형은 변의 개수가 다르고, 따라서 생성자의 매개변수 개수도 다릅니다. 그래서 우리는 직사각형에 대한 정확한 별도의 인터페이스를 만들어야 했습니다.

Задание 1

iCube 인터페이스를 만드세요. 이 인터페이스는 정육면체 도형을 설명해야 합니다. 인터페이스는 정육면체의 한 변을 매개변수로 받는 생성자와 정육면체의 부피와 겉넓이를 구하는 메서드를 설명해야 합니다.

Задание 2

iCube 인터페이스를 구현하는 Cube 클래스를 만드세요.

Задание 3

사용자를 설명하는 iUser 인터페이스를 만드세요. 사용자는 이름과 나이를 가지며, 이 필드들은 생성자의 매개변수로 전달될 것으로 가정합니다. 또한 인터페이스는 사용자에게 이름과 나이에 대한 게터(세터는 아닌)가 있도록 지정해야 합니다.

Задание 4

iUser 인터페이스를 구현하는 User 클래스를 만드세요.