swift 디자인 패턴 - 전략패턴(스트래티지 패턴) 목표 : 알고리즘 변화를 캡슐화하기 아톰과 태권브이 로봇을 만들어보자. -아톰의 기능: 주먹공격, 하늘날기 -태권브이의 기능: 미사일 공격, 걷기 아톰 클래스와 태권브이 클래스는 Robot이라는 추상 클래스의 자식클래스로 만들었다. 이유는 아톰과 태권브이는 둘다 공격(attack 메서드)와 이동 (move 메서드) 기능이 있는 로봇의 한 종류이기 때문이다. 아톰과 태권브이의 공격기능과 이동기능이 다르기 때문에 Robot 클래스에서 atack과 move 메서드를 추상 메서드로 설정해서 자식 클래스에서 정의하도록 했다. protocol Robot { var name: String { get set } func attack() func move() } //..
디자인 패턴 - solid 원칙 정리 1 목차 1.단일 책임원칙 - 객체는 하나의 책임만 갖는다. 2.개방 폐쇄 원칙 - 새로운 기능을 추가할때 기존 소스에 영향을 주지 않는다. 3.리스코프 치환 원칙 - 자식 클래스는 최소한 자신의 부모 클래스의 기능을 수행할 수 있어야 한다.(일반화와 관련) (리스코프 치환 원칙은 부모 클래스와 자식 클래스 사이의 행위가 일관성이 있어야 한다는 의미다.) 1.단일 책임 원칙 객체는 하나의 책임만 가져야 한다. 책임 : 해야 하는 것, 할 수 있는 것 학생 클래스가 수강과목을 추가하거나 조회하고, 데이터 베이스에 객체 정보를 저장하거나, 데이터베이스에서 객체 정보를 읽고, 성적표와 출석부에 출력한다고 가정해보자. public class Student{ public vo..
swift 디자인패턴 - State Pattern 상태를 객체로 나타내기 "상태에 따라 사용할 수 있는 기능들이 달라져야 할때 사용된다." 상태패턴은 객체 내부의 상태에 따라서 객체가 다른 행동을 할 수 있게 해주는 패턴이다. 즉, 객체의 상태만 변경해 주어도, 다른 행동을 하는 객체로 만들어 준다. 상태 패턴은 유한 상태 머신과도 밀접한 관련이 있다. 다만 조건문에 기반한 상태 머신의 단점은, 상태의 수와 상태에 따른 동작이 추가될 때에 크게 드러난다. 대부분의 메서드에서 굉장히 지저분한 조건문이 들어가게 된다. 하지만 상태 패턴은 가능한 모든 상태에 대해서 클래스로 추출하는 방법을 사용한다. 목표 상태패턴을 통해 상태를 객체로 나타내고 행동을 구현한다. 키워드 객체, 상태, 행동 예제 1 구조 1.c..
swift 디자인패턴 - Strategy Pattern 언제 사용하나? 어떤 상황에서 사용할 알고리즘이 여러개 존재할때 사용한다. 알고리즘을 런타임에서 변경해야 할때 사용한다. 예) 결제를 할때 결제 수단 선택하기 - 신용카드로 결제, 마일리지로 결제, 포인트로 결제, 쿠폰으로 결제 등등 검색할때 검색 조건 선택하기 - 전체검색, 이미지검색, 뉴스 검색 등등 장점 런타임에서 알고리즘을 변경 할 수 있다. 알고리즘을 사용하는 코드와 알고리즘을 구현하는 코드를 분리할 수 있다. 알고리즘을 사용하는 코드 context를 변경하지 않고도 새로운 전략 기능을 추가 할 수 있다. 단점 알고리즘이 몇개 없을때 복잡성을 증가 시킬수 있다. strategy, context간 통신오버헤드가 발생한다. 목표 인터페이스 개념..
swift 디자인패턴 - Facade Pattern 퍼사드 패턴의 키워드는 단순한 접근이다. 복잡한 서브시스템을 단순한 하나의 시스템인 퍼사드 클래스를 이용해서 간단하게 접근하게 한다는 개념이다. Facade 어떤 Subsystem 클래스가 클라이언트의 요청에 응답해야 하는지 알고 있습니다. 클라이언트의 요청을 적절한 Subsystem에게 전달합니다. Subsystem Subsystem 기능을 구현합니다. Facade 객체에서 전달받은 요청을 처리합니다. 서브 시스템 클래스들은 Facade 객체의 존재를 모릅니다. Client 클라이언트는 서브 시스템 객체를 직접 호출하는 대신 Facade를 사용합니다. import Foundation /// 서브 시스템 1 class Subsystem1 { func o..
swift 디자인패턴 - Adapter Pattern 언제 사용하나? 1.연관성 없는 두객체를 묶어서 사용해야할때. 2.타사의 라이브러리 or 모듈을 사용해야 할때. 3.같은 프로젝트에서 다른팀이 구현해 놓은 클래스의 기능을 가져다 사용할때. 4.A 팀이 신용카드를 등록하고 조회하는 클래스를 만들어 놓았다. B 팀은 Adapter Pattern 을 만들어서 그 기능을 가져온 다음에 가공해서 사용하면된다. 해결 목표? 이미 주어진 알고리즘(Math 클래스)을 나만의 요구사항에 맞춰서 사용할 수 있다. Adapter의 사전적 의미? 기계. 기구등을 다목적으로 사용하기 위한 부가적인 기구 기본 설계 요구사항 예제 1 import UIKit /// 이미주어진 알고리즘 or 타사의 라이브러리 or 다른 팀의 모듈..