일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- apk 빌드 과정
- 디자인 패턴
- recyclerview
- Android
- appcompatactivity
- 안드로이드
- 리사이클러뷰풀
- DiffUtil
- Kotlin
- 내부 단편화
- 물리 메모리
- viewModelScope
- flutter
- 자이고트
- http 역사
- 뷰홀더
- AsyncListDiffer
- Dispatchers
- NestedScrollView
- http발전과정
- 상태관리
- 프로세스
- 리사이클러뷰
- appcompatacitivity
- 플로이드워셜
- AAC
- 절대 주소
- GetX
- 운영체제
- 데코레이터 패턴
- Today
- Total
hong's android
[Kotlin] 상속과 위임 본문
상속과 위임 언제 사용해야 할까?
상속은 “is-a” 와 같이 포함 관계가 있는 다른 클래스로 대체가 되는 경우
위임은 포함관계는 아니지만 다른 클래스 객체를 사용해야하는 경우, 구성의 관계 “has-a”
상속에서의 문제점
class Animal {
/*
public void run() {
System.out.println("달려달려~");
}
*/
// 메서드 이름을 run에서 dash로 바꿨다.
public void dash() {
System.out.println("달려달려~");
}
}
class Dog extends Animal {
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.run(); // 에러 발생!! 수정이 필요하다.
}
}
상속은 부모 - 자식 클래스 간의 종속이 생긴다. 그렇기 때문에 유연성이 떨어질 수 있다.
위 예제는 부모 클래스에서 자식 클래스에 상속하는 메소드의 변경이 일어난 상황이다.
자바에서 위임 구현
class Pistol {
public void bang() {
System.out.println("권총 빵야!");
}
public void reload() {
System.out.println("재장전");
}
public void aiming() {
System.out.println("조준");
}
}
class Police {
private Pistol pistol = new Pistol();
public void bang() {
pistol.bang();
}
public void reload() {
pistol.reload();
}
public void aiming() {
pistol.aiming();
}
}
public class Main {
public static void main(String[] args) {
Police police = new Police();
police.bang();
police.reload();
police.aiming();
}
}
Police 클래스는 위임하고자 하는 객체(pistol)을 가지고 있다. (Composition)
Police와 Pistol간의 결합은 낮아진다.
하지만 같은 메소드를 bang,reload,aiming은 아래와 같은 원칙들을 위배한다.
1) 반복해서 재사용 해야한다. -> DRY 원칙
2) 확장을 할때 변경에 닫혀 있어야한다. -> OCP 원칙
코틀린에서의 위임
OCP와 DRY 원칙이 위배되고 코드가 많아질수록 위임을 위해 작성해야할 부분들이 많다.
코틀린은 언어 차원에서 위임을 지원해준다.
class Manager() : Worker by JavaProgrammer()
Reference
https://todaycode.tistory.com/175
Delegation이 무엇인지 아시나요? (상속과 구성까지 알아보자)
1. 요약 2. 상속과 구성 2-1. 상속 2-2. 상속의 문제점 2-3. 구성 2-4. 구성의 문제점 2-5. 그렇다면 무엇을 사용해야 할까? 3. 결합을 더 느슨하게 하기 4. Delegation 4-1. 개념 4-2. 예제 4-3. Delegation을 쉽게
todaycode.tistory.com
https://readystory.tistory.com/202
[Kotlin] Kotlin Delegation 이해하기① - 왜 상속보다 추천되는 걸까?
상속과 델리게이션(위임) 모두 객체지향 프로그래밍의 디자인 방식입니다. 두 방식 모두 클래스를 다른 클래스로부터 확장하는데요. 개발자는 종종 두 방식 사이에서 선택을 해야 하는데, 언어
readystory.tistory.com
'Develop > Kotlin' 카테고리의 다른 글
[코틀린] object 키워드 (0) | 2023.03.13 |
---|---|
[Kotlin] 코틀린 인 액션 2장 (0) | 2023.01.16 |
[Kotlin] 코틀린 인 액션 1장 (0) | 2023.01.16 |