Menu
Coddy logo textTech

인터페이스 소개

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

인터페이스는 클래스가 따라야 하는 계약을 정의합니다. 추상 메서드와 구체적인 메서드를 모두 포함할 수 있는 추상 클래스와 달리, 인터페이스는 구현 없이 메서드 시그니처만 선언합니다. 이것을 하나의 약속으로 생각하세요. 인터페이스를 구현하는 모든 클래스는 해당 특정 메서드들을 제공할 것을 보장합니다.

인터페이스는 interface 키워드를 사용하여 정의합니다:

<?php
interface Printable {
    public function print();
}

이 인터페이스는 Printable을 구현하는 모든 클래스가 print() 메서드를 가져야 함을 선언합니다. 인터페이스는 메서드가 어떻게 작동하는지에는 관심이 없으며, 단지 메서드가 존재하는지만 확인합니다.

기본 구조를 보여주는 간단한 예제입니다:

<?php
interface Drivable {
    public function start();
    public function stop();
}

인터페이스 메서드에는 본문이 없으며, 세미콜론으로 끝나는 시그니처만 있다는 점에 유의하세요. 인터페이스의 모든 메서드는 암시적으로 public이므로, private 또는 protected를 사용할 수 없습니다.

인터페이스는 서로 관련이 없는 클래스들이 공통된 동작을 공유할 수 있게 해주기 때문에 강력합니다. CarMotorcycle은 상속 관계에서는 공통점이 없을 수도 있지만, 둘 다 Drivable을 구현하여 start()stop() 메서드를 갖도록 보장할 수 있습니다.

핵심 포인트: 인터페이스는 클래스가 어떤 메서드를 가져야 하는지를 정의하며, 그 메서드들이 어떻게 작동해야 하는지를 정의하지는 않습니다. 이는 구현 클래스가 반드시 충족해야 하는 계약을 설정합니다.

challenge icon

챌린지

쉬움

인터페이스를 소개하는 간단한 메시징 시스템을 구축해 보겠습니다. 메시지가 어떻게 처리되어야 하는지에 대한 계약을 설정하는 인터페이스를 정의하여, 다음 레슨에서 만들 구현 클래스의 기초를 마련할 것입니다.

코드는 두 개의 파일로 구성됩니다:

  • Messageable.php — 메시지를 생성하기 위한 compose($content)와 메시지를 전송하기 위한 deliver()라는 두 가지 메서드 시그니처를 선언하는 Messageable 인터페이스를 정의합니다. 인터페이스 메서드는 본문이 없으며, 세미콜론으로 끝나는 시그니처만 가집니다.
  • main.php — Messageable 파일을 포함합니다. 인터페이스가 올바르게 정의되었는지 확인하기 위해 PHP의 interface_exists() 함수를 사용하여 Messageable이 존재하는지 확인합니다. 그런 다음 ReflectionClass를 사용하여 인터페이스를 검사하고 해당 메서드 목록을 나열합니다. 인터페이스의 리플렉션을 생성하고, getMethods()를 사용하여 메서드를 가져온 뒤, 각 메서드 이름을 별도의 줄에 출력합니다.

출력 결과는 인터페이스에 선언된 두 메서드 이름을 정의한 순서대로 각각 별도의 줄에 표시해야 합니다.

이 챌린지는 미래의 클래스가 충족해야 할 계약인 인터페이스를 정의하는 데에만 집중합니다. 메서드가 어떻게 작동할지 걱정하지 않고 어떤 메서드가 존재해야 하는지를 설정하는 것입니다. 해당 구현은 다음 레슨에서 다룹니다!

치트 시트

인터페이스는 클래스가 따라야 하는 계약을 정의합니다. 구현 없이 메서드 시그니처만 선언합니다.

interface 키워드를 사용하여 인터페이스를 정의합니다:

<?php
interface Printable {
    public function print();
}

인터페이스 메서드는 본문이 없으며, 세미콜론으로 끝나는 시그니처만 가집니다. 인터페이스의 모든 메서드는 암시적으로 public입니다.

<?php
interface Drivable {
    public function start();
    public function stop();
}

인터페이스를 사용하면 서로 관련이 없는 클래스들이 특정 메서드를 구현하도록 보장함으로써 공통된 동작을 공유할 수 있습니다.

직접 해보기

<?php
// Messageable 인터페이스 파일을 포함합니다
require_once 'Messageable.php';

// TODO: interface_exists()를 사용하여 Messageable 인터페이스가 존재하는지 확인합니다

// TODO: Messageable 인터페이스에 대한 ReflectionClass 객체를 생성합니다

// TODO: getMethods()를 사용하여 메서드들을 가져옵니다

// TODO: 메서드들을 루프하며 각 메서드 이름을 개별 줄에 출력합니다

?>
quiz icon실력 점검

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

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