티스토리 뷰

추상 클래스와 인터페이스는 모두 인스턴스화 (new)를 할 수 없다는 공통점이 있다.

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

  추상 클래스 인터페이스
추상이 아닌 메소드 가질 수 있음 모든 메서드가 추상 메서드
인스턴스 변수 선언 가능 불가능, static final 은 가능
생성자 정의 가능 정의 불가

가시성 차이점

구분 인터페이스 멤버 (메서드) 추상 클래스 멤버 (메서드, 변수) 인터페이스 자체 추상클래스 자체
Public 기본적으로 적용 명시적으로 지정 가능 명시적으로 지정 가능 명시적으로 지정 가능
Protected 불가능 지정 가능 불가능 지정 가능
Private 자바 9+에서 내부 구현을 위해 지정 가능 지정 가능 불가능 지정 가능
Package-private 패키지 내에 선언 시 자동 적용 (명시적으로 public이 아닐 경우) 패키지 내에 선언 시 자동 적용(명시적으로 public, protected, private이 아닐 경우) 패키지 내에 선언 시 자동 적용 (명시적으로 public이 아닐 경우) 패키지 내에 선언 시 자동 적용 (명시적으로 public, protected, private이 아닐 경우)

 

추상 클래스와 인터페이스는 언제 사용할까?

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

추상 클래스는 일부 메서드를 구현할 수 있으므로 여러 클래스에 걸쳐 공통으로 사용될 수 있는 기본 동작이 있을 때, 하위 클래스에 특정 메서드나 필드가 반드시 있어야 할 때 사용된다.
인터페이스를 사용하는 경우

서로 다른 클래스들이 같은 동작을 하길 원하지만, 그 동작이 각 클래스마다 완전히 다르게 구현되어야 할 때.
다중 상속 효과를 내고 싶을 때 (자바와 같은 언어에서는 다중 상속을 지원하지 않으므로).
구현 로직에 상관없이, 단순히 메서드의 시그니처만 공개하고 싶을 때 사용된다.

'CS > OOP' 카테고리의 다른 글

UML(UML 필요성, 클래스 다이어그램)  (1) 2024.03.29
객체 지향 원리 적용  (2) 2023.03.03
좋은 객체 지향 설계의 5가지 원칙-SOLID  (0) 2023.02.22