일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Design Pattern
- 코코아 인터널스
- Tistory
- Opensource
- ios #swift #uialertcontroller #메서드 스위즐링
- Cocoa Internals
- World
- 부트캠프
- 단위 테스트
- boostcamp
- 네이버 부캠
- WWDC
- notion
- 개발
- Algorithm
- Hello
- 디자인패턴
- 알고리즘
- IOS
- 부스트캠프
- 커스텀 뷰
- rxswift
- SwiftUI
- Swift
- development
- OS
- 후기
- Today
- Total
목록전체 글 (51)
꿈돌이랜드
RxSwift 깃허브 저장소를 살펴보며 작성했습니다.Observable.createObservable.create를 뜯어봅시다. create 메서드는 다음과 같이 정의되어 있습니다.RxSwift/Observables/Create.swiftextension ObservableType { public static func create(_ subscribe: @escaping (AnyObserver) -> Disposable) -> Observable { return AnonymousObservable(subscribe) } }create는 Observable자체가 아닌 ObservableType 프로토콜의 타입 메서드로 정의되어 있습니다.Observable은 정의에서, ObservableType을 프로토콜로..

9.1 타입 시스템스위프트 타입 시스템은 자바스크립트나 파이썬처럼 자유로운 덕 타입 시스템이 아니라 명시적인 타입 시스템이다. 오브젝티브-C 처럼 모든 객체가 다이내믹 타입은 아니지만 프로토콜 타입을 활용해서 다이내믹하게 확장하면서도 오브젝티브-C보다 안전하게 쓸 수 있다.9.1.1 스위프트 타입스위프트에는 크게 두 종류의 타입이 있다. 이름 있는 타입(named type)과 이름 없이 합쳐진 타입(compound type)이다. 이름 있는 타입은 클래스, 구조체, 열거, 프로토콜 같은 타입의 이름이 미리 정해진 형태를 말한다. 기존 타입을 상속, 확장해서 나만의 이름을 주고 새로운 타입으로 지정할 수도 있다. 라이브러리에 포함하고 있는 배열, 사전, 옵셔널 타입도 모두 이름 있는 타입이다. 오브젝티브-..
…중략…8.2 스위프트 클로저클로저는 접근 가능한 특정 범위(scope) 내에서 사용하는 값을 (함수 내부에) 갖고 있는 함수를 의미한다. 스위프트에서 함수는 모두 클로저다. 그리고 스위프트에서 클로저는 함수이거나 이름 없는 그냥 클로저 중 하나다. 일부 스위프트 함수는 오브젝티브-C 블록 객체 형태로 호환 가능하다. 반대로 블록 객체는 스위프트에서 클로저처럼 호환성을 유지하면서 호출할 수 있다.8.2.1 클로저 형식…중략…스위프트에서 함수는 당연히 다른 함수의 인자 값으로 사용할 수 있다.…중략…참조 범위가 전체인 글로벌 함수는 이름은 있지만 캡처하는 변수가 없는 클로저가 된다. 다른 함수 내부에 선언한 중첩 함수는 감싸고 있는 함수 범위에 접근 가능한 변수들을 캡처하는 이름 있는 클로저가 된다. 마지..
스위프트의 구조체는 여타의 C 기반 언어의 구조체에 비해 훨씬 강력하다. 그런데 클래스는 그러면 언제 사용해야 할까?애플의 Swift Programming Language Guide에서는 다음과 같이 제시하고 있다기본적으로는 구조체를 사용하라.Swift의 구조체는 다른 언어의 클래스로 취급될 정도의 많은 기능을 포함한다.예를 들면, stored property, computed property, method 등이 있다.게다가, 프로토콜을 채택할 수 있다.구조체는 value 타입이기 때문에 앱의 상태를 고려할 필요가 없다.Objective-C 와의 상호작용이 필요할 때는 클래스를 사용하라.데이터를 처리해야 하는 Objective-C API를 사용하거나 프레임워크에 정의된 기존 클래스 계층에 맞춰야 하는 경..
7.1.1 두 단계 초기화 패턴초기화 과정코코아 프레임워크의 객체들을 포함해서 NSObject에서 상속받은 모든 클래스의 인스턴스가 만들어지기까지는 두 단계에 걸쳐서 초기화가 이루어진다.Pen *aPen = [[Pen alloc] init];첫 번째 단계에서 Pen 클래스에 alloc 메시지를 보내서, 힙 공간에 객체 인스턴스 메모리 공간을 할당한다. 두 번째 단계에서는 객체 인스턴스에 init 메시지를 보내서 객체 인스턴스 속성이나 내부에 필요한 객체나 값을 초기화한다. …중략… 1단계에서 메모리 할당이 되지 않으면, 2단계 초기화 과정은 진행이 불가능하다.…중략두 단계 초기화를 한 단계로 줄여서 사용하기 위해 간편한 메서드를 클래스 메서드로 제공하기도 한다.Pen *aPen = [Pen new];이 ..
🪙코코아 프레임워크 객체는 크게 두 가지로 분류할 수 있다. 하나는 객체를 초기화한 이후에는 내부 데이터를 변경할 수 없는 불변 객체이며, 다른 하나는 변경이 가능한 가변 객체다. 예를 들어 문자열을 다루는 NSString 클래스는 문자열을 바꿀 수 있는 인터페이스가 없는 불변 객체다. 가변 객체를 사용하려면 NSMutableString 클래스로 객체 인스턴스를 생성해야 한다.5.1.1 불변 객체의 특징불변 객체들은 다음과 같은 특징을 가진다.초기화 이후 객체 내부의 값이나 상태가 변하지 않는다.불변 속성 때문에 여러 객체에서, 여러 스레드에서 참조해도 안전하다.값이 바뀌는 상황을 고민하지 않기 때문에 설계가 쉽고 구현하기 수월하다.객체 내부에 모순된 상태가 줄어들어 부작용이 적다.…중략불변 객체를 사용..

4.1 NSCopying 계열 프로토콜코코아 프레임워크에서는 객체를 복사하기 위한 방법으로 또는 프로토콜을 지정해서 필요한 메서드를 구현하는 방법을 권장한다. 프로토콜은 객체를 복사하기 위해 클래스에 미리 구현해야 하는 복사용 메서드 목록을 지정해놓은 프로토콜이다. 애플이 만든 코코아 객체는 이미 프로토콜을 기반으로 만들어져 있어서 객체를 복사하기 쉽다. 프로토콜과 프로토콜 차이는 복사한 객체가 변경 가능한 객체인지 아닌지에 따라 달라진다.4.1.1 복사만 가능한 객체 프로토콜은 구현해야 할 메서드가 딱 하나뿐이다. 내가 만든 객체가 복사 가능한 객체여야 한다면 프로토콜을 선언하고 다음 메서드를 구현하면 된다.-(id)copyWithZone:(NSZone*)zone; // Objective-Cfunc c..

GCDGrand Central Dispatch(GCD)예전에는 프로세서의 클럭 속도를 높이는 방식으로 연산 속도를 높였지만 전력 소비와 프로세서의 클럭 속도 증가에 한계가 있어 멀티 코어 프로세싱이 탄생하게 되었고 이러한 프로세싱에서는 멀티 프로세스에게 어떻게 프로그램의 동작을 배분하는지 중요해졌다.GCD 이전에는 멀티 스레딩을 위해 Thread와 OperationQueue 등의 클래스를 사용했지만, 스레드는 이런 저런 이유로 복잡하고 관리하기가 까다롭고, OperationQueue는 GCD에 비해 무겁고 BoilerPlate 코드들이 많이 필요했다.GCD는 애플에서 개발한 기술로 스레드 관리와 실행에 대한 책임을 어플리케이션 레벨에서 운영체제 레벨로 전가시켰다. 작업단위는 Block(스위프트에서는 클로..