Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 깃허브
- 더티비트
- JUnit
- git
- 리드미
- markdown
- Class.class
- Spring Boot
- Compose
- 다단계 큐
- SOLID
- coroutine flow
- O.S
- github
- OS
- JetPack
- design pattern
- Data Binding
- Android
- 데드락
- 마크다운
- Constraint Layout
- android study jam
- LiveData
- kotlin
- 운영체제
- test
- Di
- readme
- spring
Archives
- Today
- Total
차지
추상클래스와 인터페이스 본문
추상클래스와 인터페이스
자바 기반 언어에는 상속을 시킬 수 있는 클래스가 두 종류가 있습니다.
추상클래스와 인터페이스 두 차이를 중심으로 서술합니다.
추상클래스
자식 클래스가 어떤 클래스인지 포괄적으로 이야기합니다.
자식과 부모간 공통 코드를 부모에만 정의합니다.
- 추상 클래스의 추상 메서드는 자식에서 구현이 필요하며, 부모 클래스에 구현된 일반 메서드는 구현하지 않습니다.
- 추상 클래스는 자식 클래스가 상속을 받아 사용하며 독립적으로는 사용할 수 없습니다.
- 개, 돼지, 소는 모두 동물이라고 포괄적으로 이야기할 수 있습니다.
// Animal 클래스는 바로 사용할 수 없고 상속을 통해 사용됩니다.
abstract class Animal {
// eat 함수는 자식이 그대로 물려받습니다.
// 또한, final 지정자로 지정되어 있는 클래스는 자식 클래스가 함부로 수정할 수 없습니다.
// java와 달리 kotlin에서는 함수가 public이 아닌 final로 지정되어 있기 때문에 캡슐화가 잘 이루어집니다.
fun eat() {
print("eat")
}
// walk 클래스는 바로 사용할 수 없고 자식 클래스에서 구현이 필요합니다.
abstract fun walk()
}
class Dog : Animal {
override fun walk() {
print("walk walk walk walk")
}
}
class Pig : Animal {
override fun walk() {
print("walk walk walk walk")
}
}
- 동물은 모두 똑같이 입으로 먹습니다. 공통 코드이기 때문에 부모에만 구현했습니다.
- 동물들은 네 발로 걷기도 하고 두 발로 걷기도 합니다. 하지만 모두 걷기 때문에 추상 메서드로 정의했습니다.
인터페이스
구현체가 어떤 기능을 하는지 이야기합니다.
- 인터페이스는 다중 상속을 위해서 사용합니다.
- 흔히 드는 예시인 Flyable 인터페이스를 예시로 들어보겠습니다.
interface Flyable {
fun fly()
}
class Bird : Flyable {
override fun fly() {
print("fly")
}
}
class Airplane : Flyable {
override fun fly() {
print("fly")
}
}
- Bird와 Airplane 모두 비행하는 기능을 갖고 있습니다.
- 그렇기에 Flyable 인터페이스의 메서드를 구현해 사용할 수 있습니다.
추상 클래스 vs 인터페이스
이럴 때 추상 클래스를 사용
- 공통 코드가 많을 때 사용합니다.
- 자식 클래스에 재차 구현하지 않고 부모에만 구현할 수 있다는 점이 특징입니다.
- 또한 자식의 수정이 아예 불가능하기 때문에 캡슐화에도 도움됩니다.
이럴 때 인터페이스를 사용
- 여러 클래스가 유사한 기능을 할 때 사용합니다.
- 비행기와 새는 엄연히 다른 클래스이지만 유사하게 날기 때문에 인터페이스를 사용할 수 있습니다.
- Flyable한 객체를 사용하는 코드가 있다면 유용하게 확장할 수 있습니다.
'Computer Science > OOP' 카테고리의 다른 글
[SOLID] 객체지향 5원칙: LSP (0) | 2022.01.21 |
---|---|
[SOLID] 객체지향 5원칙: SRP, OCP (0) | 2022.01.13 |