인터페이스 란?
인터페이스를 사용하면 클래스에서 구현해야 하는 메서드를 지정할 수 있다.
인터페이스를 사용하면 다양한 클래스를 같은 방식으로 쉽게 사용할 수 있다.
하나 이상의 클래스가 동일한 인터페이스를 사용하는 경우 이를 “다형성”이라고한다.
인터페이스는 interface키워드로 선언된다.
interface InterfaceName { public function someMethod1(); public function someMethod2($name, $color); public function someMethod3() : string; }
이런식으로 입력한다.
인터페이스 vs 추상 클래스
인터페이스는 추상 클래스와 유사하다.
인터페이스와 추상 클래스의 차이점에 대해 알아보자.
- 인터페이스는 속성을 가질 수 없지만 추상 클래스는 속성을 가질 수 있다.
- 모든 인터페이스 메서드는 public이어야 하지만 추상 클래스 메서드는 public 또는 protected다.
- 인터페이스의 모든 메서드는 추상적이므로 코드로 구현할 수 없으며 추상 키워드가 필요하지 않는다.
- 클래스는 동시에 다른 클래스에서 상속하면서 인터페이스를 구현할 수 있다.
인터페이스 사용
implements인터페이스를 구현하려면 클래스에서 키워드 를 사용해야한다.
인터페이스를 구현하는 클래스는 인터페이스의 모든 메서드를 구현해야한다.
예시
예시를 통해 공부해보자.
PHP
<?php interface Animal { public function makeSound(); } class Cat implements Animal { public function makeSound() { echo "Meow"; } } $animal = new Cat(); $animal->makeSound(); ?>
기본 예시
Meow모든 동물이 할 수 있는 행동이 있지만 각 동물은 고유한 방식으로 행동한다.
PHP
<?php interface Animal { public function makeSound(); } class Cat implements Animal { public function makeSound() { echo " Meow "; } } class Dog implements Animal { public function makeSound() { echo " Bark "; } } class Mouse implements Animal { public function makeSound() { echo " Squeak "; } } $cat = new Cat(); $dog = new Dog(); $mouse = new Mouse(); $animals = array($cat, $dog, $mouse); foreach($animals as $animal) { $animal->makeSound(); } ?>
기본 예시
Meow Bark Squeak각 동물이 다르게 행동하더라도 모든 동물에 대해 작동할 수 있다.
makeSound()는 Cat, Dog, Mouse는 모두 Animal 인터페이스를 구현하는 클래스로 모두 이 메서드 를 사용하여 소리를 낼 수 있다.
이 때문에 우리는 각 동물이 어떤 종류의 동물인지 알지 못하더라도 모든 동물을 반복하여 소리를 내라고 말할 수 있다.
인터페이스는 클래스에 메서드 구현 방법을 알려주지 않기 때문에 각 동물은 고유한 방식으로 소리를 낼 수 있다.
PHP
<?php ?>
기본 예시
참고
W3C School - PHP OOP - Interfaces
W3C School - PHP Tryit Editor