PHP 객체지향 프로그래밍에서 인터페이스 내 생성자 선언
인터페이스 내에서도 클래스의 생성자를 선언할 수
있습니다. 예제를 통해 살펴보겠습니다. 우리가
Rectangle 클래스를 만들기로 결정했다고
가정해 보겠습니다. 이 클래스에는 넓이와 둘레를
구하는 메서드와 두 개의 매개변수를 받는 생성자가
포함될 것입니다. 인터페이스를 사용하여 우리의
클래스를 정의해 봅시다:
<?php
interface iRectangle
{
public function __construct($a, $b); // 두 매개변수를 가진 생성자
public function getSquare();
public function getPerimeter();
}
?>
이제 iRectangle 인터페이스의 구현을
작성해 봅시다:
<?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 인터페이스를
만들었을까요? 모든 도형은 변의 개수가 다르고, 따라서
생성자의 매개변수 개수도 다릅니다. 그래서 우리는
직사각형에 대한 정확한 별도의 인터페이스를
만들어야 했습니다.
iCube 인터페이스를 만드세요. 이 인터페이스는
정육면체 도형을 설명해야 합니다. 인터페이스는
정육면체의 한 변을 매개변수로 받는 생성자와
정육면체의 부피와 겉넓이를 구하는 메서드를
설명해야 합니다.
iCube 인터페이스를 구현하는
Cube 클래스를 만드세요.
사용자를 설명하는 iUser 인터페이스를
만드세요. 사용자는 이름과 나이를 가지며, 이
필드들은 생성자의 매개변수로 전달될 것으로
가정합니다. 또한 인터페이스는 사용자에게
이름과 나이에 대한 게터(세터는 아닌)가
있도록 지정해야 합니다.
iUser 인터페이스를 구현하는
User 클래스를 만드세요.