프로그래밍/Design Pattern
-
(3) Decorator Pattern프로그래밍/Design Pattern 2023. 3. 13. 00:42
여러 종류의 음료 가격을 계산하는 부분을 구현하려고 합니다. 음료별 종류뿐만 아니라 커피처럼 토핑 옵션이 있을 때, 음료 메뉴들의 부모클래스를 선언하고 각 메뉴별로 상속하여 옵션별로 가격을 반환하는 구조로 만들 수 있습니다. class Beverage { func cost() -> Int { return 2500 } } class Espresso: Beverage { override func cost() -> Int { return super.cost() } } class TwoShotEspresso: Beverage { override func cost() -> Int { return super.cost() + 1000 } } class ThreeShotEspresso: Beverage { overri..
-
(2) Observer Pattern프로그래밍/Design Pattern 2023. 3. 5. 17:27
새로운 알림이 올 때마다 하단 탭의 badge 숫자들이 갱신되어야 한다고 합니다. 이때 알림이 올 때마다 FCM 라이브러리의 특정 함수가 불려진다고 한다면 아래처럼 구현할 수 있을 것입니다. class ReceiveData { var 채팅탭_뱃지카운트: Int var 알림탭_뱃지카운트: Int var 전체_뱃지카운트: Int ... } class FCM { let chattingTab = ChattingTab() let alarmTab = AlarmTab() /// 라이브러리에 의해서 새로운 알림이 올 때마다 호출되어지는 함수 func receiveNewAlert(data: ReceiveData) { let (채팅탭_뱃지카운트, 알림탭_뱃지카운트, 전체_뱃지카운트) = data chattingTab.up..
-
(1) Strategy Pattern프로그래밍/Design Pattern 2023. 3. 5. 02:43
설명 1. 새로운 기획에서 앱 화면에 오리(duck)를 그려달라고 하여, 오리 클래스를 만들게 되었다고 가정합니다. 또 오리를 눌렀을 때 오리가 꽥꽥 내는 소리와 나는 동작을 표현해야 한다고 하면 코드 짰을 때 대략 다음과 같을 것입니다. class Duck { func quack() { // 꽥꽥 } func fly() { // 나는 동작 } ... } 2. 그 다음주 기획에서 타겟A군의 유저에게는 청둥오리, B군에는 검은오리가 있어야 한다고 합니다. 또한 이 오리들의 우는 소리와 나는 효과가 달라야 한다고 합니다. 이 경우 개발자는 간단히 오리 클래스를 상속하여 각 오리 클래스를 구현하는 선택을 할 수 있습니다. 구체적으로 다음과 같습니다. (1) 상속을 사용 - Duck 클래스를 상속받은 Malla..