추상 클래스와 인터페이스는 모두 인스턴스화 (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 |
추상 클래스와 인터페이스는 모두 인스턴스화 (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 |