위임 (Delegation) 위임은 클래스 혹은 구조체 인스턴스에 특정 행위에 대한 책임을 넘길 수 있게 해주는 디자인 패턴 중 하나이다. protocol DiceGame { var dice: Dice { get } func play() } protocol DiceGameDelegate: AnyObject { func gameDidStart(_ game: DiceGame) func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int) func gameDidEnd(_ game: DiceGame) } DiceGame 프로토콜을 선언하고 DiceGameDelegate에 선언해서 실제 DiceGame의 행위와 관련된 구현을 DiceGameDeleg..

이전 글 [RxSwift] 곰튀김님의 RxSwift 강의 (1) Subject 만들 때 부터 어떤 데이터를 내보낼지 정해져있다. Observable처럼 값을 받을 수도 있지만 (subscribe) 외부에서 값을 통제할 수도 있다. (onNext) AsyncSubject completed 되는 시점에 subscribe한 애들한테 가장 마지막 값을 보내준다. BehaviorSubject 초기값을 가지고 있어서 subscribe할 때 초기값을 보내준다. 그 후 추가로 생기는 subscribe은 가장 최근의 값을 초기값으로 보내준다. PublishSubject 초기값 없이 subscribe 후 값이 들어오면 그대로 보내준다. 추가로 생기는 subscribe도 같다. ReplaySubject 첫 번째 subscr..
프로토콜은 특정 기능 수행에 필수적인 요소를 정의한 청사진이다. 프로토콜을 만족시키는 타입을 프로토콜을 따른다고 한다. 프로토콜에 필수 구현을 추가하거나 추가적인 기능을 더하기 위해 프로토콜을 확장(extend)하는 것이 가능하다. 프로토콜 문법 (Protocol Syntax) protocol SomeProtocol { // protocol definition goes here } 프로토콜의 정의는 클래스, 구조체, 열거형 등과 유사하다. struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here } 프로토콜을 따르는 타입을 정의하기 위해서는 타입 이름 뒤에 콜론(:)을 붙이고 따를 프로토콜 이름을 적는다..

RxSwift ? RxSwift는 비동기적으로 생기는 데이터를 completion 같은 클로저를 통해 전달하는게 아닌 return 값으로 전달하기 위해서 만들어진 유틸리티이다. completion을 사용한 비동기 처리 방식 private func downloadJson(_ url: String, _ completion: @escaping (String?) -> Void) { DispatchQueue.global().async { let url = URL(string: url)! let data = try! Data(contentsOf: url) let json = String(data: data, encoding: .utf8) DispatchQueue.main.async { completion(json)..

열거형은 관련된 값으로 이루어진 그룹을 공통의 타입으로 선언해 안전성을 보장하는 방법으로 코드를 다룰 수 있게 해준다. C나 Objective-C가 Integer 값들로 열거형을 구성한 것에 반해 Swift에서는 case값이 String, Character, Integer, Floting 값들을 사용할 수 있다. 열거형은 1급 클래스 형이어서 계산된 프로퍼티를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용할 수 있다. 열거형 문법 (Enumeration Syntax) enum SomeEnumeration { // enumeration definition goes here } enum 키워드를 사용해 열거형을 정의한다. enum CompassPoint { case north case south ..
Strong 해당 인스턴스의 소유권을 가진다. 자신이 참조하는 인스턴스의 retain count를 증가시킨다. 값 지정 시점에 retain이 되고 참조가 종료되는 시점에 release가 된다. 선언할 때 아무것도 적어주지 않으면 default로 strong 참조가 된다. var strongRef: StrongRef? = StrongRef() // retain count 1 증가 strongRef = nil // retain count 1 감소하면서 0이 되어 메모리 해제 Weak 해당 인스턴스의 소유권을 가지지않고, 주소값만 가지고 있는 포인터 개념이다. 자신이 참조하는 인스턴스의 retain count를 증가시키지 않는다. (release도 발생하지 않는다.) 자신이 참조는 하지만 weak메모리를 해제..

Delegate와 Notification의 차이를 알아보자. Delegate, Notification 패턴이 나오게 된 배경 종속되어 동작하는 것은 재사용성과 독립적 기능요소 측면에서 바람직하지 않다. 하나의 객체가 다른 객체와 소통은 하지만 묶이진 싫을 때 사용하기 위해 등장했다. 공통점 두 가지 패턴 모두 특정 이벤트가 발생하면 원하는 객체에 알려주어 해당되는 처리를 하는 방법이다. Delegate Delegate는 protocol로 지정된 객체가 수행해야 하는 메소드들의 원형을 정해놓은 디자인 패턴이다. 이때 Delegate 역할을 하려는 객체는 이 protocol을 따르며 원형만 있던 메소드들을 구현한다. // 1) Delegate 프로토콜 선언 protocol SomeDelegate { func..
[Swift] Generic (2) 저번 글에 이어서 제네릭에 대해서 더 알아보자 연관 타입 (Associated Types) 연관 타입은 프로토콜의 일부분으로 타입에 플레이스홀더 이름을 부여한다. 다시말해 특정 타입을 동적으로 지정해 사용할 수 있다. 연관 타입의 실 사용 (Associated Types in Action) protocol Container { associatedtype Item mutating func append(_ item: Item) var count: Int { get } subscript(i: Int) -> Item { get } } 위와 같이 associatedtype을 사용할 수 있다. 이렇게 지정하면 Item은 어떤 타입도 될 수 있다. struct IntStack: C..

제네릭에 대해서 알아보자. 제네릭은 더 유연하고 재사용 가능한 함수와 타입의 코드를 작성하는 것을 가능하게 해준다. 제네릭이 풀려고 하는 문제 func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt, &anotherInt) print("someInt is now \\(someInt), and anotherInt is now \\(anotherInt)") 두 Int 값을 바꾸는 함수가 있다. 두 개의 파라미터는 inout 파라미터이다. 💡 inout 파라미터는 함수 내부에서 파라미터의 값을 변경..
GCD에 대해서 알아보자! GCD Thread 갯수, 코어 갯수, 동기/비동기화 같은 기능을 쉽게 접근하여 일을 처리하는 API DispatchQueue Queue에 담긴 각 아이템은 스레드 풀에 의해 처리된다. 1. Main Main Thread에서 처리되는 Serial Queue 모든 UI 작업은 Main Queue에서 수행되어야 함 1-1. Global 전체 시스템에 공유되는 Concurrent Queue QoS 파라미터 제공한다. 1-2. Custom Serial Queue를 만들고 싶을 때 사용, Global Queue에서 실행된다. 2. Serial 이전 작업이 끝나면 다음 작업이 순차적으로 진행 2-1. Concurrent 병렬 형태로 진행 3. Sync Queue에 집어넣은 데이터들이 끝날..
- Total
- Today
- Yesterday
- strcut
- Swift
- enumerations
- rxswift
- Git
- docker
- Protocol
- 카메라
- file private
- CodingTest
- 의미있는이름
- Generic
- IOS
- SwiftUI
- tabview
- delegate
- ChatGPT
- 곰튀김
- navigation
- onTapGesture
- OCR
- Xcode
- kakao
- AWS
- Custom
- MVVM
- Login
- ObservedObject
- frame과 bounds 차이
- AWS Fargate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |