티스토리 뷰
추상 클래스와 인터페이스는 모두 인스턴스화 (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 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 책임체인패턴
- 상태 패턴
- ArrayDeque
- 빌더 패턴
- restapi
- GithubActions
- java문법
- 반복자 패턴
- 플라이웨이트패턴
- 양방향연관관계
- 메멘토 패턴
- dfs
- 구글로그인
- 프로토타입 패턴
- idtoken
- FacadePattern
- Iterator Pattern
- Flutter
- 복합체 패턴
- UML 필요성
- 책임연쇄패턴
- springsecurity
- 프록시패턴
- 컴포지트패턴
- CompositePattern
- 브리지 패턴
- n+1
- 퍼싸드패턴
- jpa
- Chain of Responsibility
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함