공부/Java

[Java] 옆사람도 헷갈려하는 추상클래스와 인터페이스 차이점

ByeongJun 2023. 4. 10. 14:39
반응형

매주 월요일, 목요일마다 회사 동기들과 Java 스터디를 진행하고 있는데 

여주밀탱크로 불리는 사나이 영훈이의 내용이 좋아서 내가 찾은 정보를 더하여 어디 한번 쌈빡하게 정리해보고자 한다. 

 

 

 

 

추상 클래스

추상 클래스는 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우 (부모-자식 관계) 

공통의 필드나 같은 부모 클래스의 기능을 사용하거나, 공통으로 사용할 구현된 메소드가 필요할 때 사용한다.

 

인터페이스

인터페이스는 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우 

다중 상속이 필요하거나, 구현 방식 정의 없이 추상화만 필요할 때 사용한다.

 

추상 클래스(abstract class) 인터페이스(interface)
ㆍ다중 상속 불가능
ㆍ일반 메소드와 추상 메소드 모두 가능
ㆍ상속시 추상 메소드만 구현해도 됨
ㆍ클래스이므로 다중 상속이 불가능
ㆍ속도면에서 인터페이스보다 빠름
ㆍ다중 상속 가능
추상 메소드만 사용 가능
ㆍ상속시 모든 메소드를 구현해야 함
ㆍ여러 다중 인터페이스 구현 가능
ㆍ속도면에서 추상 클래스보다 느림

 

 

 


추상 클래스

  • 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스 (미완성 설계도라고도 표현) 
  • class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야 한다는 것을 알려주고
    선언부만 작성하는 추상 메서드를 선언할 수 있음

 

추상 클래스를 사용하는 경우 

  • 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화 시켜놓은 것ㅇ으로, 
    상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현할 때
  • 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복으로 멤버 통합 할 때
  • 멤버에 public 이외의 접근자(protected, private) 선언이 필요한 경우
  • non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요할 때)
  • 요구사항과 함께 구현 세부 정보의 일부 기능만 지정했을 때
  • 하위 클래스가 오버라이드하여 재정의하는 기능들을 공유하기 위한 상속 개념을 사용할 때

 

 

 


인터페이스

  • 인터페이스는 기본 설계도라고 함
  • 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고
    클래스와 다르게 다중상속(구현)이 가능

 

인터페이스를 사용하는 경우 

  • 어플리케이션의 기능을 정의해야 하지만 그 구현 방식이나 대상에 대해 추상화 할 때
  • 서로 관련성이 없는 클래스들을 (형제 관계) 묶어주고 싶을 때
  • 다중 상속(구현)을 통한 추상화 설계를 해야할 때
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지 신경 쓰지 않아도 되는 경우
  • 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용

 

반응형