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 |
Tags
- compose
- factory method
- 프로토타입 패턴
- ㅋㅁ
- Design Pattern
- 팩토리 메소드
- Observer Pattern
- PrototypePattern
- 디자인패턴 #
- define
- builderPattern
- 함수형프로그래밍
- Kotlin
- Functional Programming
- material3
- 안드로이드 디자인시스템
- 디자인패턴
- android designsystem
- designPattern
- 옵저버 패턴
- 추상 팩토리
- 싱글톤
- 빌터패턴
- 추상팩토리패턴
- 코틀린
- Abstract Factory
- Coroutines
- 코루틴
- Singleton
- ㅓ
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
전략 패턴 (Strategy Pattern) 본문
정의
알고리즘(행위)군을 캡슐화하여 각각의 서로 교환 가능하게 만들고, 런타임에 클라이언트가 사용할 알고리즘을 선택할 수 있도록 하는 디자인 패턴입니다.
오리 시뮬레이션 게임 구현하기

날수있는 오리를 만들기!
상속
부모 클래스인 Duck에 Fly() 함수를 추가한다.
문제점
- 날수 없는 하위 오리 클래스들은 아무것도 하지 않도록 불필요한 오버라이드한 함수를 가지게됨.
- 모든 오리의 나는 행동을 알수가 없음.
- 서브클래스에서 코드 중복이 발생할 수 있음.
- 부모 클래스의 코드를 변경시 원하지 않은 문제가 일어날 수 있음.
- 런타임시 행동을 변경할 수 없음.
인터페이스를 이용

문제점
- 여전히 코드의 재사용성이 떨어지고, 중복이 발생함.
- 날수 있는 오리중에서도 날아다니는 방식이 서로 다를 수 있다는 문제
애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.
바뀌는 부분은 따로 뽑아서 캡슐화한다, 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분을 고치거나 확장할 수 있다.
인터페이스에 맞춰 프로그래밍 한다.
상속보다는 구성(Composition)을 이용한다.
1. Duck Class에서 변경이 되는 부분인 행동을 분리한다.
2. 행동 인터페이스를 만들고 구체적인 행동을 가진 클래스를 구현한다.

3. Duck class에서 행동을 직접 구현하지 않고 위임한다. 행동을 상속받는 것이 아니라, 행동 객체로 구성되어 행동을 부여한다.

Class diagram

