[PHP] 상속과 인터페이스

[원본 링크]

php도 상속과 추상클래스, 인터페이스를 지원한다.

일반 상속은 자바처럼 extends로 표현한다.
그리고 부모에 대한 접근은 parent::로 처리한다.
자기 자신의 함수를 부를때는 self::로 명시한다.

아래 코드는 앞서 정의했던 Person 클래스를 상속받아 학생정보를 정의하는 Student를 구현한 예다. image

image

image

그런데 일반적으로 Person이라는 개념은 너무 광범위한 뜻을 가지고 있기 때문에 그 자체로는 잘 안쓸 수도 있다.
이런 범위가 넓은 타입을 일종의 카테고리로서만 사용하려면, 추상클래스와 인터페이스를 적용해볼 수 있다.

위의 코드를 추상클래스 형태로 바꿔보자. 이러면 Person을 상속받는 클래스는 print를 반드시 구현해야한다. 더불어 Person은 객체 생성을 할수없게된다. 구현이 다 되지 않았기때문에. image

image 클래스명 앞에 abstract를 붙여주고, 추상화할 메서드에도 abstract를 붙이고 구현하지 않는다. image

image 그대로 잘 돈다.


인터페이스는 추상클래스보다 극단적이다. 변수도 둘수 없고, 메서드구현을 하나도 하면 안된다. 객체 생성도 당연히 불가능하고, 진짜 카테고리로서만 사용할 수 있다.

어느정도 실질적인 기능을 만들어두고 넘겨줄수 있는 추상클래스보다 훨씬 뻑뻑하다.

대부분 단순 extends 상속보다는 이러한 형태의 인터페이스 상속이 권장되는 경향이 있고, 특정 패턴들을 구현할 경우에 추상클래스가 사용된다.

사용방법은 자바와 유사하다. 선언 키워드는 interface고, 인터페이스를 상속하려면 extends 대신 implements를 사용한다.

아래는 위의 코드를 인터페이스로 재구성해본 것이다. image

image 생성자나 변수까지도 전부 사라진 것을 볼 수 있다. image

image 그대로 잘 돈다.