Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 인터페이스 완벽 가이드: 기본 개념부터 다중 상속 구현까지

이 글에서는 PHP 객체 지향 프로그래밍(OOP)에서 가장 중요한 설계 패턴 중 하나인 PHP 인터페이스를 활용하는 방법을 자세히 살펴보겠습니다.

인터페이스란 무엇인가?

인터페이스(Interface)를 사용하면 메서드가 내부적으로 어떻게 구현되는지에 대한 복잡한 과정을 신경 쓰지 않고도, 클래스가 반드시 구현해야 하는 공개(public) 메서드를 미리 지정해 둘 수 있습니다. 즉, 인터페이스는 메서드의 이름과 매개변수까지만 정의할 수 있을 뿐 메서드의 실제 내용은 정의할 수 없으며, 인터페이스를 구현하는 모든 클래스는 해당 인터페이스에 선언된 모든 메서드를 반드시 구현해야 합니다.

인터페이스는 클래스와 비슷한 방식으로 선언하지만, class 키워드 대신 interface 키워드를 사용하고 메서드 본문은 작성하지 않는다는 점이 다릅니다.

예제 1: 기본적인 인터페이스 구현

간단한 예제를 통해 인터페이스를 선언하고 구현하는 방법을 확인해 보겠습니다.

<?php
    interface MyInterface {
        public function getName();
        public function getAge();
    }
    class MyClass implements MyInterface {
        public function getName() {
            echo "My name A".'<br>';
        }
        public function getAge(){
            echo "My Age 12";
        }
    }
    $obj = new MyClass;
    $obj->getName();
    $obj->getAge();
?>

출력 결과:

My name A
My Age 12

설명:

위 예제에서는 getName()getAge() 두 개의 메서드를 내용 없이 선언한 인터페이스 MyInterface를 정의했습니다. 그런 다음 MyClass가 이 인터페이스를 구현(implements)하여, 요구 사항에 맞게 각 메서드의 실제 동작을 작성했습니다.

인터페이스의 주요 특징

  • 인터페이스의 메서드는 본문(내용)이 없으며, 이는 곧 인터페이스의 메서드가 추상 메서드임을 의미합니다.
  • 인터페이스의 모든 메서드는 public 가시성 범위를 가져야 합니다.
  • 클래스는 단 하나의 클래스만 상속받을 수 있지만, 하나 이상의 인터페이스를 동시에 구현할 수 있다는 점에서 인터페이스는 클래스와 다릅니다.
  • 인터페이스 내부에는 변수를 선언할 수 없습니다(상수만 허용됩니다).

참고: 다중 상속 구현하기

인터페이스를 활용하면 다중 상속을 구현할 수 있습니다. 클래스는 오직 하나의 클래스만 상속(extends)할 수 있지만, 여러 개의 인터페이스를 동시에 구현(implements)할 수 있기 때문입니다.

예제 2: 인터페이스 상속으로 다중 상속 구현

간단한 예제로 직접 확인해 보겠습니다.

<?php
    interface a {
        public function printData();
    }
    interface b {
        public function getData();
    }
    interface c extends a, b {
        public function addData();
    }
    class d implements c {
        public function printData(){
            echo "I am printing";
        }
        public function getData(){
            echo "I am reading data";
        }
        public function addData(){
            echo "I am adding";
        }
    }
    $myobj = new d();
    $myobj->printData();
    $myobj->addData();
?>

출력 결과:

I am printing
I am adding

설명:

여기서는 세 개의 인터페이스(a, b, c)를 선언했습니다. 이때 인터페이스 c는 앞선 두 인터페이스 a와 b를 상속(extends)합니다. 이후 클래스 d는 인터페이스 c만 구현했지만, c가 a와 b를 상속하고 있기 때문에 세 인터페이스에 선언된 모든 메서드(printData, getData, addData)를 클래스 d에서 사용할 수 있습니다. 이처럼 인터페이스를 활용하면 PHP에서도 다중 상속과 같은 효과를 얻을 수 있습니다.