추상클래스와 인터페이스 비교

Tags
abstraction
class
interface
부가 설명
인터페이스는 사용명세서, 추상클래스는 확장
비고
 
참고블로그
 

1) 공통점

  • 스스로 객체를 생성할 수 없음.
  • 추상화된 부분은 사용하는 쪽에서 구현해서 써야함.

2) 차이점

2.1 상속

  • 클래스는 하나만 상속가능 - 추상클래스도 예외는 아니다. ( extends )
    • 추상클래스는 IS - A ( 상속은 하나만 가능하니까 )
      • ~는 ~다
  • 인터페이스는 여러개 상속(구현)할 수 있다. ( implements )
    • 인터페이스는 HAS - A ( 인터페이스는 다중상속(구현) 가능하니까 )
      • ~는 ~를 가지므로 ~할 수 있다

2.2 추상화 정도

  • 추상클래스는 대부분 구현해 놓고 특정 부분만 추상화 가능
  • 인터페이스는 모든 자원이 미완성이다.

3) 사용목적 (어떨 때, 어떤 걸 쓸까?)

3.1 추상클래스

  • 추상 클래스의 목적은 상속을 받아서 기능을 확장 시키는 것
    • ( 부모의 유전자를 물려 받는다 )
  • 대부분의 기능이 구현돼있고 공통적이지만, 몇가지 부분만 자식에 따라 달라질 수 있는 경우에 용이.
  • 이를 인터페이스로 정의한다면 자식 클래스에서 공통적인 코드를 계속 작성해야하는 불편함이 있음.

3.2 인터페이스

  • 인터페이스의 목적은 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할
    • ( 구현 객체들은 같은 동작을 한다는 것을 보장하기 위함 )
💡
이 인터페이스를 구현했으니, ~~형태의 ~~함수가 반드시 있겠군!
 
💡
앗 사실 extendsimplements라는 키워드에 모든 의미가 다 담겨있던 거였군!