SWIFT
-
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 ..
-
210216 TIL: POP-5.객체지향 프로그래밍, assertTIL 2021. 2. 16. 23:37
POP https://welly-log.tistory.com/13 Swift4: Protocol Oriented Programming - 5.객체지향 프로그래밍 5장 객체지향 프로그래밍 객체는 객체의 속성 정보인 프로퍼티와 객체가 수행하는 행위의 정보인 메소드를 포함한 자료 구조이다. 요구사항 설계 이동수단은 해상/지상/공중 세 개의 범주를 갖 welly-log.tistory.com assert iOS 프로그래밍을 위한 스위프트 기초 디버깅 모드에서 동작하며, 조건의 검증을 위해서 사용한다. assert()와 같은 역할을 하지만 실제 배포 환경에서도 동작하는 precondition() 함수도 있다. var someInt: Int = 0 // 조건이 맞으면 지나치고, 맞지 않으면 다음 문구를 출력 및 동작..
-
Swift4: Protocol Oriented Programming - 5.객체지향 프로그래밍POP 2021. 2. 16. 19:53
5장 객체지향 프로그래밍 객체는 객체의 속성 정보인 프로퍼티와 객체가 수행하는 행위의 정보인 메소드를 포함한 자료 구조이다. 요구사항 설계 이동수단은 해상/지상/공중 세 개의 범주를 갖고 여러 범주의 멤버가 될 수 있다. 자신이 속해 있는 범주와 일치하는 타일에 있으면 이동 또는 공격 할 수 있다. 자신이 속해 있는 범주와 일치하는 타일에 있지 않으면 이동 또는 공격할 수 없다. 체력이 0이 되면 움직이지 못하는 상태로 간주한다. 순회가 가능한 단일 배열에 활동 가능한 모든 이동수단을 가지고 있어야 한다. 객체지향 프로그래밍 언어의 스위프트 스위프트는 객체지향 방식의 언어로 사용될 수 있다. class Vehicle { var vehicleTypes = [TerrainType]() var vehicleA..
-
210215 TIL: POP-4.Generic, lhs/rhs, declaration orderTIL 2021. 2. 15. 23:40
POP https://welly-log.tistory.com/11?category=920557 Swift4: Protocol Oriented Programming - 4.제네릭 4장 제네릭 제네릭은 중복을 피하고, 유연하고 재사용 가능한 코드를 작성할 수 있게 해준다. 스위프트의 Array나 Set 같은 경우 모두 제너릭 구조체로 구현되어 있다. enum Optional { case None case Some(T) welly-log.tistory.com lhs와 rhs에 대한 흥미로운 글 나에겐 너무나 멋진사람들 : 네이버 블로그 lhs 와 rhs 연산자 함수를 만들 경우 함수의 매개변수를 적어줄때 변수 이름으로 lhs(Left Hand Side) 와 rhs(Righ... blog.naver.com lh..
-
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..