카테고리 없음

[PHP]인터페이스(interface)에 대하여

SEUNGSAMI 2019. 1. 28. 10:38
 

인터페이스(interface)

abstract, final, interface는 php에서 대표적인 세가지 규제이다. 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. 만약 인터페이스에서 강제하고 있는 메소드를 구현하지 않으면 이 에플리케이션은 컴파일 조차 되지 않는다.  
interface I{
    public function z();
}
 
class A implements I{
    public function z(){}
}
클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 맴버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다. 따라서 위의 코드는 문제가 없다. 인터페이스의 의미를 좀 더 분명하게 하기 위해서 A클래스의 public function z(){}를 삭제하면 컴파일 에러가 발생할 것이다.   객체가 반드시 인터페이스의 메소드를 구현해야 한다는 말을 듣고, 상속하고 같은 의미가 아닌가 하는 생각을 했지만, 인터페이스와 상속은 엄연히 다른 의미를 가지고 있다. 상속이 상위 클래스의 기능을 하위 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제하는 것이다.   인터페이스는 서로가 동일한 메소드를 만들도록 규약을 만들어서 공유한 결과 각자가 상대의 일정이나 구현하는 방식에 덜 영향을 받으면서 에플리케이션을 구축 할 수 있었다.  

하나의 클래스가 여러개의 인터페이스를 구현 할 수 있다.

클래스 A는 메소드 x나 z 중 하나라도 구현하지 않으면 오류가 발생한다.
interface I1{
    public function x();
}
 
interface I2{
    public function z();
}
 
class A implements I1, I2{
    public function x(){}
    public function z(){}   
}
 

인터페이스도 상속이 된다.

interface I3{
    public function x();
}
 
interface I4 extends I3{
    public function z();
}
 
class B implements I4{
    public function x(){}
    public function z(){}   
}
 

인터페이스의 멤버는 반드시 public이다.

interface I5{
    private function x();
}
위의 예제는 오류를 발생시킨다. 인터페이스는 그 인터페이스를 구현한 클래스를 어떻게 조작할 것인가를 규정한다. 그렇기 때문에 외부에서 제어 할 수 있는 가장 개방적인 접근 제어자인 public만을 허용한다. public을 생략하면 접근 제어자 default가 되는 것이 아니라 public이 된다. 왜냐하면 인터페이스의 멤버는 무조건 public이기 때문이다.  

abstract vs interface

인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다. 인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다. 또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.   -생활코딩의 자바의 인터페이스를 참고하였습니다.-



배운지 얼마 되자 않은 지식이라 잘못된 부분이 있을 수있습니다. 그러한 것은 댓글로 달아주시면 감사하겠습니다.