Interface와 abstract의 차이
2022. 2. 17. 15:31ㆍPHP
추상 클래스 abstract
클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도로 볼 수 있습니다.
추상 클래스는 추상 메소드를 0개 이상 가지고 있다는 것을 제외하고는 일반 클래스와 차이가 없습니다.
추상 클래스의 특징
- 추상 클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스 입니다.
- 추상 메소드는 하위 클래스에서 메소드를 반드시 구현해야 합니다.
- 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 합니다.
- 추상 클래스는 다중 상속이 불가능합니다.
- 클래스를 abstract로 지정하면 new를 통해 객체를 직접 생성할 수 없습니다.
- 추상 클래스를 상속 받을 경우 extends를 써야합니다.
Interface
인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도라고 표현할 수 있습니다.
인터페이스는 추상 클래스와 비슷한듯 안비슷한 느낌이여 특징을 잘 파악해야 합니다.
인터페이스 특징
- 인터페이스의 구성 요소는 상수 및 추상 메소드만 가지고 있습니다.
- 인터페이스는 다중 상속이 가능합니다.
- 인터페이스를 상속 받을 경우 implements를 써야합니다.
공통점
- 가지고 있는 추상 메서드를 구현하도록 강제한다.
- 인스턴스화가 불가능하다.
차이점
인터페이스는 implements라는 키워드처럼 인터페이스에 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌이라면 추상 클래스는 extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장 시키는 거라고 생각이 듭니다.
각각의 적절한 사용 케이스
추상 클래스
- 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
- public이외의 접근자(protected, private) 선언이 필요한 경우
인터페이스
- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우
- 다중상속을 허용하고 싶은 경우
'PHP' 카테고리의 다른 글
PHP 비트 연산자 (0) | 2022.03.02 |
---|---|
객체지향 5원칙(SOLID) - 리스코프 치환 원칙 (0) | 2022.02.17 |
객체지향 5원칙(SOLID) - 의존성 역전 원칙 (0) | 2022.02.17 |
객체지향 5원칙(SOLID) - 인터페이스 분리 원칙 (0) | 2022.02.15 |
객체지향 5원칙(SOLID) - 개방 폐쇄 원칙 (0) | 2022.02.15 |