⊗ppOpIfSII 73 of 107 menu

PHP OOP에서 여러 인터페이스

PHP는 다중 상속을 지원하지 않습니다. 각 클래스는 오직 하나의 부모 클래스만 가질 수 있습니다. 그러나 인터페이스의 경우 상황이 다릅니다: 각 클래스는 임의의 개수의 인터페이스를 구현할 수 있습니다. 이를 위해 인터페이스 이름들을 키워드 implements 뒤에 쉼표로 구분하여 나열하면 됩니다.

이는 인터페이스와 추상 클래스의 또 다른 차이점을 보여줍니다 - 여러 인터페이스를 구현할 수는 있지만, 여러 추상 클래스를 상속받을 수는 없습니다.

실제로 시도해 봅시다. iFigure 인터페이스 외에 iTetragon 인터페이스도 있다고 가정해 보겠습니다. 이 인터페이스의 메서드는 Quadrate 클래스와 Rectangle 클래스에 의해 구현될 것입니다, 왜냐하면 그들은 4개의 변을 가지지만, Disk 클래스는 그렇지 않기 때문입니다.

iTetragon 인터페이스가 사각형의 모든 네 변에 대한 게터(getter)를 설명한다고 가정해 봅시다:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

또한 이전에 만들었던 iFigure 인터페이스도 있다고 가정해 봅시다:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

Quadrate 클래스가 두 인터페이스를 구현하도록 만들어 봅시다. 이를 위해 키워드 implements 뒤에 두 인터페이스를 쉼표로 구분하여 나열합니다:

<?php class Quadrate implements iFigure, iTetragon { // 여기에 구현이 들어갑니다 } ?>

이제 Quadrate 클래스가 iTetragon 인터페이스를 구현하도록 수정해 봅시다. 우리의 정사각형은 퇴화된(degenerate) 사각형의 경우라는 것이 명백합니다, 왜냐하면 정사각형의 모든 변은 같기 때문입니다. 따라서 모든 새로운 메서드들은 동일한 것 - 정사각형의 너비 - 을 반환할 것입니다:

<?php class Quadrate implements iFigure, iTetragon { private $a; public function __construct($a) { $this->a = $a; } public function getA() { return $this->a; } public function getB() { return $this->a; } public function getC() { return $this->a; } public function getD() { return $this->a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } } ?>

분명히, 직사각형에서는 모든 변이 같지 않고, 오직 마주보는 변만 같습니다. 이 경우 새로운 메서드들은 약간 다르게 될 것입니다. 그리고 예를 들어, 사다리꼴에서는 일반적으로 4 변이 모두 다릅니다.

그러나, 우리가 고려할 도형이 무엇인지는 중요하지 않습니다. 중요한 것은 이 모든 도형들이 기술된 메서드들을 가질 것이며 (비록 일부 도형이 퇴화된 경우일지라도) 동일한 방식으로 작동할 것이라는 점입니다.

Rectangle 클래스도 두 인터페이스: iFigureiTetragon를 구현하도록 만들어 보세요.

getRadiusgetDiameter 메서드를 가진 iCircle 인터페이스를 만들어 보세요.

Disk 클래스도 두 인터페이스: iFigureiCircle를 구현하도록 만들어 보세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부