protocolorientedprogramming
-
Swift4: Protocol Oriented Programming - 8.사례 연구POP 2021. 3. 6. 19:48
8장 사례 연구 실제 프로젝트를 통해 언어와 프로그래밍 패러다임을 익혀보자. 디자인 패턴 사용을 적극적으로 고려하자. 애플리케이션을 위한 로그 서비스 만들기 데이터 접근 계층 만들기 로깅 서비스 로깅 프레임워크는 애플리케이션을 개발하면서 디버깅을 쉽게 도와주는 로그 메세지를 간단하게 작동시킬 수 있도록 해준다. 요구사항 여러 가지 로그 레벨을 가져야만 한다. Fatal, Error, Warn, Debug, Info 로그 레벨이 있다. 여러 가지 로그 프로파일을 가진다. LoggerNull와 LoggerConsole 두 가지 프로파일이 있고, LoggerNull은 로그 메세지에 할 수 있는 일이 아무 것도 없다. LoggerConsole 프로파일은 콘솔에 로그 메세지를 출력한다. 사용자는 자신만의 로깅 프..
-
Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (3) 행위 패턴POP 2021. 2. 24. 21:06
행위 패턴 타입 간에 상호작용이 어떻게 이뤄지는 지 설명. 어떠한 일을 하기 위해 어떻게 서로 다른 타입의 인스턴스 간에 메세지를 보내는지 설명. 책임 연쇄 다른 핸들러에 위임돼 있을지 모르는 다양한 요청을 처리 커맨드 나중에 다른 컴포넌트에 의해 실행될 수 있게 행동이나 매개변수를 캡슐화한 객체를 생성 이터레이터 근본적인 구조는 노출시키지 않고, 객체의 요소에 연속적으로 접근할 수 있도록 한다. 미디에이터 서로 정보를 전달하는 타입 간의 결합도를 줄인다. 메멘토 객체의 현재 상태를 캡쳐하고 나중에 복구할 수 있게 객체를 얼마동안 저장 옵저버 객체의 변경 상태를 알린다. 다른 객체는 이러한 변경 사항에 대한 알림을 받기 위해 이를 구독할 수 있다. 스테이트 내부 상태가 변경될 경우 객체의 행동을 변경하기..
-
Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (2) 구조 패턴POP 2021. 2. 24. 21:03
구조 패턴 어떻게 타입을 더 큰 구조체로 결합할 수 있는가를 서술. 더 큰 구조체는 작업하기 쉽고, 복잡도를 감추기에 좋다. 구조 패턴의 대부분의 패턴들은 객체 간의 연결을 수반한다. 어댑터(Adapter) 공존할 수 없는 인터페이스를 가진 타입을 합께 작동하게 해준다. 브리지(Bridge) 구현체로부터 타입의 추상적 요소를 분리하는데 사용, 둘은 달라질 수 있다. 컴포지트(Composite) 객체 그룹을 하나의 객체로 다룸 데코레이터(Decorator) 객체에 이미 존재하는 메소드에 행위를 추가하거나 오버라이드 퍼사드(Facade) 더 크고 복잡한 코드를 위한 단순화된 인터페이스 제공 플라이웨이트(Flyweight) 생성해야 하는 리소스를 줄이고 많은 유사 객체를 사용하도록 해준다. 프록시(Proxy)..
-
Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (1) 생성 패턴POP 2021. 2. 19. 03:10
7장 스위프트에서 디자인 패턴 적용 디자인 패턴 공통의 소프트웨어 개발 문제를 확인하고 이를 다루기 위한 전략을 제공. 여러 개발적 문제를 해결하는 방법들이 입증되어 있기 때문에 개발 프로세스 속도를 높일 수 있다. 또한, 유지하기 쉬운 일관된 코드를 얻을 수 있다. 코드와 구현한 디자인 패턴을 문서로 만들게 될 경우, 다른 개발자가 해당 코드가 어떠한 일을 하는지 이해하는데 도움을 줄 수도 있다. 코드의 재사용 유연성 문제를 수정하려고 하기 전에 수정하고자 하는 문제를 먼저 확인하는 것이 좋은 방법. 해결하고자 하는 문제에 대한 디자인 패턴이 없을 때는 디자인 패턴에 관한 지식과 근본적인 철학을 이용할 수 있을 것이다. 범주 생성 패턴: 객체의 생성을 지원 구조 패턴: 타입과 객체 컴포지션과 관련 행위..
-
Swift4: Protocol Oriented Programming - 6.프로토콜지향 프로그래밍POP 2021. 2. 17. 23:44
6장 프로토콜지향 프로그래밍 5장의 요구사항을 프로토콜지향 설계로 다시 작성한다. 프로토콜지향 프로그래밍 언어의 스위프트 프로토콜은 컴포지션(다중 채택)이 가능하기 때문에 5장에서와는 달리 지상/공중/해상 범주에 필요한 프로토콜들을 나눌 수 있다. 프로토콜 컴포지션, 상속, 확장을 이용하면 코드를 더욱 간결하고 안전성있게 작성할 수 있다. protocol Vehicle { var hitPoints: Int {get set} } // 모든 이동수단에서 같은 기능을 하는 메소드를 확장으로 구현 extension Vehicle { mutating func takeHit(amount: Int) { hitPoints -= amount } func hitPointsRemaining() -> Int { return ..
-
Swift4: Protocol Oriented Programming - 5.객체지향 프로그래밍POP 2021. 2. 16. 19:53
5장 객체지향 프로그래밍 객체는 객체의 속성 정보인 프로퍼티와 객체가 수행하는 행위의 정보인 메소드를 포함한 자료 구조이다. 요구사항 설계 이동수단은 해상/지상/공중 세 개의 범주를 갖고 여러 범주의 멤버가 될 수 있다. 자신이 속해 있는 범주와 일치하는 타일에 있으면 이동 또는 공격 할 수 있다. 자신이 속해 있는 범주와 일치하는 타일에 있지 않으면 이동 또는 공격할 수 없다. 체력이 0이 되면 움직이지 못하는 상태로 간주한다. 순회가 가능한 단일 배열에 활동 가능한 모든 이동수단을 가지고 있어야 한다. 객체지향 프로그래밍 언어의 스위프트 스위프트는 객체지향 방식의 언어로 사용될 수 있다. class Vehicle { var vehicleTypes = [TerrainType]() var vehicleA..
-
Swift4: Protocol Oriented Programming - 4.제네릭POP 2021. 2. 15. 23:36
4장 제네릭 제네릭은 중복을 피하고, 유연하고 재사용 가능한 코드를 작성할 수 있게 해준다. 스위프트의 Array나 Set 같은 경우 모두 제너릭 구조체로 구현되어 있다. enum Optional { case None case Some(T) } 제네릭의 대표적 예시는 옵셔널이다. 옵셔널에 nil을 대입하면 None 값을 갖고, 어떠한 값을 대입하면 T 타입의 Some 값을 갖게 된다. 제네릭 함수 제네릭 함수를 이용하여 타입 마다 같은 기능을 하는 함수를 계속해서 만들 필요 없이, 중복을 최소화하여 구현할 수 있다. func swapGenerics(a: inout T, b: inout T) { let tmp = a a = b b = tmp } 위에서 T는 플레이스홀더로 스위프트에게 타입을 런타임 단계에서..
-
Swift4: Protocol Oriented Programming - 3.확장POP 2021. 2. 15. 01:18
3장 확장 확장 확장은 이미 존재하는 타입의 소스 코드가 없더라도 기능을 추가할 수 있게 해준다. 확장으로 추가할 수 있는 것들 연산 프로퍼티 인스턴스/타입 메소드 Convenience Initializer 서브스크립트 저장 프로퍼티는 추가할 수 없음! extension String { func getFirstChar() -> Character? { guard count > 0 else { return nil } return self[startIndex] } subscript(r: CountableClosedRange) -> String { get { let start = index(self.startIndex, offsetBy: r.lowerBound) let end = index(self.startI..