본문 바로가기

아이폰 개발186

swift 디자인 패턴 - 템플릿 메서드 패턴 swift 디자인 패턴 - 템플릿 메서드 패턴 학습목표 공통 코드의 재사용 방법을 부분적으로 이해하기 여러회사의 모터 지원하기 현대모터를 이용해서 엘리베이터를 제어하는 시스템이라면 HyundaiMotor 클래스에 move 메서드를 정의할 수 있다. HyundaiMotor 클래스는 move 메서드를 실행할 때 안전을 위해 문(Door 클래스)이 닫혀 있는지 조사 할 필요가 있다. 따라서 HyundaiMotor 클래스에서 Door 클래스로의 연관 관계를 정의했다. 또한 엘리베이터가 이동 중이면 모터를 구동시킬 필요가 없다. MotorStatus, DoorStatus, Direction은 Enumeration 으로 각각 모터의 상태 (정지 중, 이동 중) , 문의상태 (닫힘상태, 열림상태) , 이동 방향(위,.. 2022. 11. 10.
디자인 패턴 - solid 원칙 정리 2 디자인 패턴 - solid 원칙 정리 2 4.의존 역전 원칙 의존 역전 원칙은 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운것, 거의 변화가 없는 것에 의존하라 5.인터페이스 분리 원칙 인터페이스를 클라이언트에 특화되도록 분리 시켜라 ✅ 의존 역전 원칙 객체 사이에 서로 도움을 주고 받으면 의존 관계가 발생한다. 의존 역전 원칙은 그러한 의존 관계를 맺을 때의 가이드라인에 해당한다. 도움을 받을 때 여기저기 도움을 받을 것이 아니라 원칙을 가지고 도움을 청해야 한다는 것이다. Key point 의존 역전 원칙은 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운것, 거의 변화가 없는 것에 의존하라는 원칙이다. 변하기 쉬운것과 어려운것은.. 2022. 11. 9.
swift 디자인 패턴 - 데코레이터 패턴 swift 디자인 패턴 - 데코레이터 패턴 목표 : 독립적인 추가 기능의 조합 방법 이해하기. 데커레이터 패턴을 통한 기능의 조합 방법 이해하기. 도로 표시 방법 조합하기 자동차의 네비게이션에서 도로를 표시해 주는 기능이 있다. 기본적으로 도로를 표시해 주는 기능이 있고, 추가적으로 차선을 표시해주는 기능이 있다. RoadDisplay 클래스 : 기본 도로 표시 기능 담당 RoadDisplayWithLane 클래스 : 기본 도로 표시에 추가적으로 차선을 표시하는 기능 담당 이때 RoadDisplayWithLane 클래스는 RoadDisplay 클래스의 하위 클래스로 설계를 한다. [코드 1] import Foundation import CoreLocation /// 기본 도로 표시 클래스 class Ro.. 2022. 11. 8.
swift 디자인 패턴 - 옵저버 패턴 swift 디자인 패턴 - 옵저버 패턴 목표 : 데이터의 변화를 통보하는 방법 이해하기 옵서버 패턴을 통한 통보의 캡슐화 방법 이해하기 ✅여러가지 방식으로 성적 출력하기 입력된 성적값을 출력하는 프로그램 코드 작성해보자 필요한 클래스는 입력된 점수를 저장하는 ScoreRecord 클래스와 점수를 목록의 형태로 출력하는 DataSheetVIew 클래스가 필요하다. 그리고 성적이 입력된 경우에는, 즉 ScoreRecord 클래스의 addScore 메서드가 실행될 때 성적을 출력하려면 ScoreRecord 클래스는 DataSheetView 객체를 참조해야 한다. ScoreRecord 클래스의 addScore 메서드가 호출되면 ScoreRecord 클래스는 자신의 필드인 scores 객체에 점수를 추가한다. 그.. 2022. 11. 7.
swift 디자인 패턴 - 커맨드 패턴 swift 디자인 패턴 - 커맨드 패턴 목표 : 기능을 캡슐화로 처리하는 방법 이해하기 커맨드 패턴을 통한 기능의 캡슐화 방법이해하기 만능 버튼 만들기 기능 : 눌리면 특정 기능을 수행 [코드] //MARK: 1.일반 class Lamp { func turnOn(){ print("lamp on") } } class Button{ private var theLamp:Lamp? init(theLamp: Lamp? = nil) { self.theLamp = theLamp } func pressed(){ theLamp?.turnOn() } } let lamp = Lamp() let lampButton = Button(theLamp: lamp) lampButton.pressed() //lamp on print(".. 2022. 11. 4.
swift 디자인 패턴 - 상태패턴(스테이트 패턴) swift 디자인 패턴 - 상태패턴(스테이트 패턴) 목표 1.상태를 캡슐화로 처리하는 방법 이해하기 2.스태이트 패턴을 통한 상태 변화의 처리 방법 이해하기 3.새로운 상태를 추가할 수 있는 방법 이해하기 실세계의 많은 시스템은 다양한 상태가 있고 상태에 따라 다른 행위를 한다. 상태란 객체가 시스템에 존재하는 동안, 즉 객체의 라이프 타임 동안 객체가 가질 수 있는 조건이나 상황을 표현한다. 예) 객체가 어떤 상태에 있는 동안 어떤 액티비티 등을 수행하거나 특정 이벤트가 발생하기를 기다리는 것. 형광등 만들기 작동방식 형광등이 꺼져 있을 때 외부에서 On 버튼을 누르면 형광등이 켜지고, 형광등이 켜져 있을 때 Off 버튼을 누르면 꺼진다. 만약 이미 형광등이 켜져 있는 상태에서 On 버튼을 누르면 형광.. 2022. 11. 3.
swift 디자인 패턴 - 전략패턴(스트래티지 패턴) swift 디자인 패턴 - 전략패턴(스트래티지 패턴) 목표 : 알고리즘 변화를 캡슐화하기 아톰과 태권브이 로봇을 만들어보자. -아톰의 기능: 주먹공격, 하늘날기 -태권브이의 기능: 미사일 공격, 걷기 아톰 클래스와 태권브이 클래스는 Robot이라는 추상 클래스의 자식클래스로 만들었다. 이유는 아톰과 태권브이는 둘다 공격(attack 메서드)와 이동 (move 메서드) 기능이 있는 로봇의 한 종류이기 때문이다. 아톰과 태권브이의 공격기능과 이동기능이 다르기 때문에 Robot 클래스에서 atack과 move 메서드를 추상 메서드로 설정해서 자식 클래스에서 정의하도록 했다. protocol Robot { var name: String { get set } func attack() func move() } //.. 2022. 11. 2.
디자인 패턴 - solid 원칙 정리 1 디자인 패턴 - solid 원칙 정리 1 목차 1.단일 책임원칙 - 객체는 하나의 책임만 갖는다. 2.개방 폐쇄 원칙 - 새로운 기능을 추가할때 기존 소스에 영향을 주지 않는다. 3.리스코프 치환 원칙 - 자식 클래스는 최소한 자신의 부모 클래스의 기능을 수행할 수 있어야 한다.(일반화와 관련) (리스코프 치환 원칙은 부모 클래스와 자식 클래스 사이의 행위가 일관성이 있어야 한다는 의미다.) 1.단일 책임 원칙 객체는 하나의 책임만 가져야 한다. 책임 : 해야 하는 것, 할 수 있는 것 학생 클래스가 수강과목을 추가하거나 조회하고, 데이터 베이스에 객체 정보를 저장하거나, 데이터베이스에서 객체 정보를 읽고, 성적표와 출석부에 출력한다고 가정해보자. public class Student{ public vo.. 2022. 11. 2.
swift 메소드 정리 swift 메소드 정리 메서드 메서드는 특정 타입에 관련된 함수를 뜻한다. 스위프트에서 클래스, 구조체, 열거형 은 인스턴스 메서드를 정의할 수 있다. 또한 타입 자체와 관련된 기능을 실행하는 타입 메서드를 정의할 수도 있다. 인스턴스 메서드 인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻한다. 인스턴스 내부의 프로퍼티 값을 변경하거나 특정 연산 결과를 반환하는 등 인스턴스와 관련된 기능을 실행한다. 인스턴스 메서드는 인스턴스가 존재할 때만 사용할 수 있다. 참고로 아래 코드에서 LevelClass의 인스턴스 메서드가 level 인스턴스 프로퍼티의 값을 수정한다. 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경 쓸 필요가 없다. 하지만 구조체나 열거형은 값 타입이므로 메서드.. 2022. 10. 31.