swift 디자인 패턴 - 옵저버 패턴 목표 : 데이터의 변화를 통보하는 방법 이해하기 옵서버 패턴을 통한 통보의 캡슐화 방법 이해하기 ✅여러가지 방식으로 성적 출력하기 입력된 성적값을 출력하는 프로그램 코드 작성해보자 필요한 클래스는 입력된 점수를 저장하는 ScoreRecord 클래스와 점수를 목록의 형태로 출력하는 DataSheetVIew 클래스가 필요하다. 그리고 성적이 입력된 경우에는, 즉 ScoreRecord 클래스의 addScore 메서드가 실행될 때 성적을 출력하려면 ScoreRecord 클래스는 DataSheetView 객체를 참조해야 한다. ScoreRecord 클래스의 addScore 메서드가 호출되면 ScoreRecord 클래스는 자신의 필드인 scores 객체에 점수를 추가한다. 그..
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("..
swift 디자인 패턴 - 상태패턴(스테이트 패턴) 목표 1.상태를 캡슐화로 처리하는 방법 이해하기 2.스태이트 패턴을 통한 상태 변화의 처리 방법 이해하기 3.새로운 상태를 추가할 수 있는 방법 이해하기 실세계의 많은 시스템은 다양한 상태가 있고 상태에 따라 다른 행위를 한다. 상태란 객체가 시스템에 존재하는 동안, 즉 객체의 라이프 타임 동안 객체가 가질 수 있는 조건이나 상황을 표현한다. 예) 객체가 어떤 상태에 있는 동안 어떤 액티비티 등을 수행하거나 특정 이벤트가 발생하기를 기다리는 것. 형광등 만들기 작동방식 형광등이 꺼져 있을 때 외부에서 On 버튼을 누르면 형광등이 켜지고, 형광등이 켜져 있을 때 Off 버튼을 누르면 꺼진다. 만약 이미 형광등이 켜져 있는 상태에서 On 버튼을 누르면 형광..
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 메소드 정리 메서드 메서드는 특정 타입에 관련된 함수를 뜻한다. 스위프트에서 클래스, 구조체, 열거형 은 인스턴스 메서드를 정의할 수 있다. 또한 타입 자체와 관련된 기능을 실행하는 타입 메서드를 정의할 수도 있다. 인스턴스 메서드 인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻한다. 인스턴스 내부의 프로퍼티 값을 변경하거나 특정 연산 결과를 반환하는 등 인스턴스와 관련된 기능을 실행한다. 인스턴스 메서드는 인스턴스가 존재할 때만 사용할 수 있다. 참고로 아래 코드에서 LevelClass의 인스턴스 메서드가 level 인스턴스 프로퍼티의 값을 수정한다. 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경 쓸 필요가 없다. 하지만 구조체나 열거형은 값 타입이므로 메서드..