인터페이스 소개
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 27번째.
인터페이스는 클래스가 따라야 하는 계약을 정의합니다. 추상 메서드와 구체 메서드를 모두 포함할 수 있는 추상 클래스와 달리, 인터페이스는 구현 없이 메서드 시그니처만 선언합니다. 이를 약속이라고 생각해 보세요. 인터페이스를 구현하는 모든 클래스는 해당 메서드를 제공할 것을 보장합니다.
interface 키워드를 사용하여 인터페이스를 Define합니다:
<?php
interface Printable {
public function print();
}
이 interface는 Printable을 구현하는 모든 클래스가 print() method를 가져야 한다고 선언합니다. 이 interface는 method가 어떻게 작동하는지는 신경 쓰지 않고, 단지 그것이 exists하는지만 확인합니다.
기본 구조를 보여 주는 간단한 예제입니다:
<?php
interface Drivable {
public function start();
public function stop();
}
interface methods에는 body가 없으며, just 세미콜론으로 ending되는 signature만 있습니다. interface의 모든 methods는 암시적으로 public이므로 private 또는 protected를 사용할 수 없습니다.
인터페이스는 서로 관련 없는 클래스들이 공통 동작을 공유할 수 있도록 해 주기 때문에 강력합니다. Car와 Motorcycle은 상속 측면에서 공통점이 전혀 없을 수 있지만, 둘 다 Drivable을 구현하여 start() 및 stop() 메서드를 갖도록 보장할 수 있습니다.
핵심 요점: interface는 클래스가 어떤 methods를 가져야 하는지 정의하지만, 그것들이 어떻게 작동해야 하는지는 정의하지 않습니다. 이는 구현하는 클래스가 충족해야 하는 계약을 설정합니다.
챌린지
쉬움인터페이스를 소개하는 간단한 메시징 시스템을 만들어 보겠습니다. 메시지가 어떻게 처리되어야 하는지에 대한 계약을 설정하는 interface를 Define하고, 다음 lesson에서 만들 implementing classes의 기반을 마련합니다.
코드를 두 개의 파일로 구성합니다:
Messageable.php:Messageable이라고 called interface를 Define합니다. 이 interface는 두 method signatures를 선언합니다: 메시지를 creating하기 위한compose($content)와 메시지를 sending하기 위한deliver()입니다. Remember, interface methods는 body가 없고, semicolon으로 ending되는 signature만 have 있습니다.main.php: Messageable 파일을 Include합니다. interface가 올바르게 정의되었는지 확인하려면 PHP의interface_exists()function을 사용하여Messageable이 exists하는지 check합니다. 그런 다음ReflectionClass를 사용하여 interface를 inspect하고 methods를 나열합니다. interface의 reflection을 Create하고,getMethods()를 사용하여 methods를 가져옵니다(ReflectionMethodobjects를 반환함). 그런 다음 각 method의getName()을 own line에 print합니다.
출력에는 interface가 선언한 두 method names가 표시되어야 하며, 각각 separate line에 정의한 order대로 표시되어야 합니다.
이 challenge는 순수하게 interface를 정의하는 데 초점을 맞춥니다. 즉, future classes가 fulfill해야 할 contract입니다. 어떻게 작동할지는 걱정하지 않고, 어떤 methods가 must exist하는지만 설정합니다. 해당 implementation은 다음 lesson에서 다룹니다!
직접 해보기
<?php
// Messageable 인터페이스 파일을 포함합니다
require_once 'Messageable.php';
// TODO: interface_exists()를 사용하여 Messageable 인터페이스가 존재하는지 확인
// TODO: Messageable 인터페이스에 대한 ReflectionClass 객체 생성
// TODO: getMethods()를 사용하여 메서드 가져오기
// TODO: 메서드를 반복하며 각 메서드 이름을 한 줄에 출력
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러