no image
[Swift] RxSwift의 subscribe(on:)와 observe(on:), Combine의 subscribe(on:)와 receive(on:)
rxSwift와 combine의 비동기 흐름은 아래와 같다 Observable → 이벤트 생성 → 전달 → Observer RxSwift의 경우Observable → 이벤트 생성 → 전달 → Observer subscribe(on:) observe(on:) 이벤트가 생성되는 쪽의 실행 스레드를 지정해주는 것이 subscribe(on:)생성된 이벤트를 전달받아 처리하는 쪽의 실행 스레드를 지정해주는 것이 observe(on:)이다.Observable .create { observer in // Subscription 영역 } ..
2025.06.20
no image
[Swift] @Published는 값을 언제 방출할까 ?
combine에서 @Published는 값이 바뀔때마다 방출을 하는데 이때 방출되는 시점은 언제일까 ??당연히 didSet이 호출되어 값이 바뀌고 난 뒤라고 생각했는데 실제 값과 receive된 값이 다르다는 걸 알게 되었다.//// ContentView.swift// Test//// Created by 이준복 on 6/20/25.//import SwiftUIimport Combinestruct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text("Count: \(viewModel.count)") ..
2025.06.20
[Swift] 일급객체, 일급함수, 고차함수, 순수함수
일급 객체일급객체, 일급함수란 객체나 함수가 값으로 취급될 수 있다는 것이다.값으로 취급 할 수 있다는 것의 의미는 변수를 할당받거나, 파라미터로 전달되거나 리턴 값으로 취급 될 수 있다는 것이다.설명으로만 보면 이해하기 힘든데 코드를 보면 쉽게 이해가 가능하다// 반환 값func getName() -> String { "Name"}// 파라미터로 전달func add(_ a: Int, _ b: Int) -> Int { a + b}// 변수에 저장struct Person { let name: String let age: Int}let person = Person(name: "준", age: 20)위와 같이 처럼 정수형, 배열, 객체, 클래스 등 변수에 할당받을 수 있는 타입을 일급객체..
2025.06.16
no image
[Swift] Key Value Coding(KVC), Key Value Observing(KVO)
Key의 개념Swift의 KeyPath, KVC, KVO 자꾸나오는 Key의 개념은?문자열(Key)를 의미이 key값을 통해 instance의 property value에 간접적으로 접근하게 해주는 Objective-C에서 나온 개념KVC, KVO가 생기게 된 이유Objective - C로 개발하던 시절에는 MVC 패턴이 정답이라고 생각하던 시기MVC에서 가장 중요한것은 Model과 View의 Sync를 맞추는 일여기서 Controller는 2가지 역할을 수행하여야 함Model의 변화를 View에 반영View의 Interaction을 Model에 반영View나 Model에서 Action이 일어날 때마다 이 2가지 과정을 거쳐일일이 상태값을 업데이트 해주고 View와 Model을 동기화 해줘야하는 문제에 ..
2024.06.15
no image
[Swift] GCD, Async/Sync 알아보기 비동기(Asynchronous)란 말과 Concurrency(동시성)란 말이 같은 말인가?
Concurrency(동시성) 프로그래밍 왜 동시성 프로그래밍인가 ?? 우리가 은행을 갔다고 해보자. 아래와 같이 은행원1에게만 고객이 줄을 선다고 하면 대기중인 고객은 자신의 앞에 있는 고객이 끝나기 전까지는 계속해서 기다려야 한다. 하지만 옆에 있는 은행원들 에게 고객을 분산시켜주면 아주 빠르게 고객들의 업무를 볼 수 있다. 즉 은행원1에게 쌓인 일을 분산시킨다면 고객들이 아무리 은행에 많이 와도 아주 빠르게 업무를 해결할 수 있는것이다. 즉 우리는 지금까지 작성한 코드들은 위와 같이 은행원1(메인스레드) 에게만 일을 맡겼던 것이다. func Task1() { ... } func Task2() { ... } func Task3() { ... } Task1() Task2() Task3() Task를 어..
2024.01.22
[Swift] RxSwift, Combine 원리 이해하기
왜 RxSwift가 나오게 되었는지 또 RxSwift가 어떤 원리인지 알아봅시다.비동기 함수의 콜백지옥아래는 swift에서 json을 다운로드 하는 함수입니다.func downloadJson(_ url: String, _ completion: ((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) ..
2024.01.20
no image
[Swift] 정규표현식
정규 표현식 규칙 숫자 [0-9] \d 숫자가 아닌 문자 \D 문자(숫자, 글자 모두 포함) \w 한글 [가-힣] : 한글 모두 영어 [A-Z] : 대문자 [a-z] : 소문자 [A-Za-z] : 대소문자 모두 문자매칭 : 앞의 문자가 0번 이상 반복 : 앞의 문자가 1번 이상 반복 ? : 0 or 1개의 문자 매칭 . : 1개의 문자 매칭 시작과 끝 ^* : *로 시작 *$ : *로 끝난다 공백 \r\n : 줄바꿈 \s : 공백(space) \t : tab \f : form feed 특수문자 [!@#$%^&*()-=+] = 특수문자 특수기호 swift에서는 특수기호 앞에 **\**가 붙어야한다 \. == . \\ == \ 조건문 | : or 정규표현식 예시 [0-9]* : 숫자가 1개 이상 0, 01,..
2024.01.12
no image
[Swift] Swift에서의 메모리 관리
Swift에서의 메모리 관리 Swift에서는 ARC(Automatic Reference Counting)를 사용하여 자동으로 할당/해제를 해준다. BoostCamper 클래스가 있을 때 Swift에서 힙에 메모리를 어떻게 할당하고 해제하는지 알아보자. class BoostCamper { letid: String let name: String } var boostcamper1: BoostCamper? = BoostCamper(id: "S029", name: "이준복") var boostcamper2: BoostCamper? = boostcamper1 boostcamper2 = nil boostcamper1 = nil 이처럼 Swift는 rc가 0이 되면 자동으로 힙에 할당한 메모리를 해제 해주게 된다. A..
2023.12.28
no image
[Swift] Copy-on-Write
Copy-on-Write 💡 Collection의 Copy -On-Write 예를 들어 변수 A에 들어있는 Collection값을 새로운 변수 B에 복사한다고 할 때 바로 복사본을 만들지 않습니다. Reference Type 처럼 B는 A의 참조만 공유합니다. 만약 B의 값에 변경이 발생되면 그 시점에서 A에 대한 새로운 복사본을 만들어 B에게 주고 값을 변경합니다. Copy-On-Write는 Reference type의 효율성과 Value type의 불변성을 이용하는 것 입니다. 할당은 많이 일어나지만 변경은 그것보다 적게 일어나 복사의 비용을 줄일 수 있고 변경이 일어나면 기존의 값을 복사하여 새로운 값을 만든 뒤 변경하므로 기존의 값도 변하지 않는 불변성을 유지 할 수 있습니다. // 예시 var ..
2023.12.28