공부공부/Java

[Java] 추상클래스와 인터페이스의 차이

이숭간 2021. 7. 15. 13:53
728x90

추상클래스와 인터페이스는 둘다 다형성을 구현하는데 쓰인다는 공통점이 있지만 개념적으로 차이가 있다.

 

상속은 "같은 종류의 하위 클래스를 만드는 기술"이라면

인터페이스는 "사용방법이 동일한 클래스를 만드는 기술" 이라는 점에서 차이가 있다.

 

추상클래스란?

  • 미완성 설계도
  • abstract 키워드로 선언된 클래스
  • 추상메서드를 최소 한개 이상 가진다.
  • 추상메서드가 없어도 abstract키워드로 선언된 클래스면 추상클래스이다.

추상클래스의 구현

  • 서브(자식)클래스에서 슈퍼(부모)클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다.

추상클래스의 목적

  • 상속을 위한 클래스로, 객체생성을 위한 클래스가 아니다.
  • 단지 여러 클래스의 공통된 부분을 추상화(추출)하여 상속받는 클래스에게 구현을 강제하기 위한것 (메소드의 동작을 구현하는 자식클래스로 책임을 위임

인터페이스란?

  • 기본설계도
  • 추상메서드와 상수만 가지며, 데이터를 저장하지않는 개발코드와 객체의 통신접점을 의미한다.
  • interface키워드로 선언되며 인터페이스는 다중상속이 가능하다

인터페이스의 구현

  • 인터페이스의 모든 추상메소드를 구현한 구현클래스를 작성한다.
  • implements키워드를 사용해서 구현한다.
  • 만약 구현하는 인터페이스가 어떤 상위 인터페이스를 상속하고 있는경우 구현클래스는 상위인터페이스의 모든 추상메소드까지 전부 구현해야한다.

인터페이스의 목적

  • 상속받을 서브클래스에게 구현할 메서드의 원형을 알려주고, 이를 구현하도록 하여 클래스의 동작방식을 일치시킨다.
  • 구현객체의 같은 동작을 보장하기위한 목적
  • 예를들어, 서로 관련없는 클래스에서 공통적으로 사용하는 방식이 필요하지만, 기능은 각각 구현해야할 필요가 있는경우 사용한다.
    • EX) JPA의 crud와같은 데이터를 조회,추가, 삭제하는경우 어떤 데이터베이스를 사용하던 crud라는 기능은 같지만 그 구현에는 차이가 있으므로 이럴때 인터페이스를 사용할 수 있다.

추상클래스와 인터페이스의 공통점

  • 인스턴스를 생성할 수 없다.
  • 자식클래스 또는 구현클래스가 추상 메서드의 구체적인 동작을 구현하도록 책임을 위임한다.

추상클래스와 인터페이스의 차이점

  • 애초에 목적이 다르다.
    • 추상클래스는 추상메서드를 자식이 구체화하여 그 기능을 확장하는데 목적이 있다.(is kind of) (ex) 가전제품 - TV, 냉장고)
    • 인터페이스는 구현 객체의 같은 동작을 보장하는데 목적이 있다.(can do this) ( ex) 날수있다 - 비행기, 새)
  • 추상클래스는 클래스이지만 인터페이스는 클래스가 아니다.
  • 추상클래스는 단일상속이지만 인터페이스는 다중상속이 가능하다. ( 추상클래스는 일반메소드도 포함하기 때문)

출처 : https://myjamong.tistory.com/150

추상클래스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 같은 조상클래스를 상속하는데 기능까지 완변히 똑같은 기능이 필요한 경우 ( 사람 만이 할수있는 기능을 사람이라는 추상클래스에 선언한다.)

 

인터페이스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 다른 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스 사용 ( 말할 수 있다라는 기능을 talkable인터페이스에 선언하고 사람과 동물이 이를 모두 사용한다.)

 

 

출처

https://myjamong.tistory.com/150

https://github.com/WeareSoft/tech-interview/blob/master/contents/java.md#클래스-객체-인스턴스의-차이