Interface와 abstract의 차이

2022. 2. 17. 15:31PHP

추상 클래스 abstract

클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도로 볼 수 있습니다.

추상 클래스는 추상 메소드를 0개 이상 가지고 있다는 것을 제외하고는 일반 클래스와 차이가 없습니다.

 

추상 클래스의 특징

  • 추상 클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스 입니다.
  • 추상 메소드는 하위 클래스에서 메소드를 반드시 구현해야 합니다.
  • 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 합니다.
  • 추상 클래스는 다중 상속이 불가능합니다.
  • 클래스를 abstract로 지정하면 new를 통해 객체를 직접 생성할 수 없습니다.
  • 추상 클래스를 상속 받을 경우 extends를 써야합니다.

 

Interface

인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 기본 설계도라고 표현할 수 있습니다.

인터페이스는 추상 클래스와 비슷한듯 안비슷한 느낌이여 특징을 잘 파악해야 합니다.

 

인터페이스 특징

  • 인터페이스의 구성 요소는 상수 및 추상 메소드만 가지고 있습니다.
  • 인터페이스는 다중 상속이 가능합니다.
  • 인터페이스를 상속 받을 경우 implements를 써야합니다.

 

공통점

  • 가지고 있는 추상 메서드를 구현하도록 강제한다.
  • 인스턴스화가 불가능하다.

 

차이점

인터페이스는 implements라는 키워드처럼 인터페이스에 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌이라면 추상 클래스는 extends 키워드를 사용해서 자신의 기능들을 하위 클래스로 확장 시키는 거라고 생각이 듭니다.

 

각각의 적절한 사용 케이스

추상 클래스

  • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
  • public이외의 접근자(protected, private) 선언이 필요한 경우

 

인터페이스

  • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우
  • 다중상속을 허용하고 싶은 경우