iOS/Swift
-
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을 동기화 해줘야하는 문제에 ..
[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 -
Concurrency(동시성) 프로그래밍 왜 동시성 프로그래밍인가 ?? 우리가 은행을 갔다고 해보자. 아래와 같이 은행원1에게만 고객이 줄을 선다고 하면 대기중인 고객은 자신의 앞에 있는 고객이 끝나기 전까지는 계속해서 기다려야 한다. 하지만 옆에 있는 은행원들 에게 고객을 분산시켜주면 아주 빠르게 고객들의 업무를 볼 수 있다. 즉 은행원1에게 쌓인 일을 분산시킨다면 고객들이 아무리 은행에 많이 와도 아주 빠르게 업무를 해결할 수 있는것이다. 즉 우리는 지금까지 작성한 코드들은 위와 같이 은행원1(메인스레드) 에게만 일을 맡겼던 것이다. func Task1() { ... } func Task2() { ... } func Task3() { ... } Task1() Task2() Task3() Task를 어..
[Swift] GCD, Async/Sync 알아보기 비동기(Asynchronous)란 말과 Concurrency(동시성)란 말이 같은 말인가?Concurrency(동시성) 프로그래밍 왜 동시성 프로그래밍인가 ?? 우리가 은행을 갔다고 해보자. 아래와 같이 은행원1에게만 고객이 줄을 선다고 하면 대기중인 고객은 자신의 앞에 있는 고객이 끝나기 전까지는 계속해서 기다려야 한다. 하지만 옆에 있는 은행원들 에게 고객을 분산시켜주면 아주 빠르게 고객들의 업무를 볼 수 있다. 즉 은행원1에게 쌓인 일을 분산시킨다면 고객들이 아무리 은행에 많이 와도 아주 빠르게 업무를 해결할 수 있는것이다. 즉 우리는 지금까지 작성한 코드들은 위와 같이 은행원1(메인스레드) 에게만 일을 맡겼던 것이다. func Task1() { ... } func Task2() { ... } func Task3() { ... } Task1() Task2() Task3() Task를 어..
2024.01.22 -
왜 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) ..
[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 -
정규 표현식 규칙 숫자 [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,..
[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 -
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..
[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 -
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 ..
[Swift] Copy-on-WriteCopy-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 -
프로세스 메모리 관리 기본적으로 프로세스의 메모리가 할당되면 영역은 4군데로 나뉜다. Code 우리가 작성한 소스 코드 저장되는 공간 컴파일 타임에 결정되고 중간에 코드가 변경되는 일이 없도록 Read-Only 형태로 저장된다 Data 전역변수와 static 변수들이 저장되는 공간 보통의 경우엔 프로그램 시작과 동시에 할당되며 프로그램이 종료되어야 해제된다 하지만 Swift에서의 static은 lazy이기 때문에 아마 접근 시 할당되고 앱이 종료시 해제 될 것이다. 실행 도중에 변수 값이 변경될 수 있기 때문에 Read-Write 형태로 저장된다. Stack 함수 호출 시 함수의 지역변수, 매개변수, 리턴값 등이 저장되는 공간. 컴파일 시점에 결정되고 함수가 종료되면 할당된 메모리도 해제 된다. 장점 C..
[Swift] Swift에서의 Value Type, Reference Type프로세스 메모리 관리 기본적으로 프로세스의 메모리가 할당되면 영역은 4군데로 나뉜다. Code 우리가 작성한 소스 코드 저장되는 공간 컴파일 타임에 결정되고 중간에 코드가 변경되는 일이 없도록 Read-Only 형태로 저장된다 Data 전역변수와 static 변수들이 저장되는 공간 보통의 경우엔 프로그램 시작과 동시에 할당되며 프로그램이 종료되어야 해제된다 하지만 Swift에서의 static은 lazy이기 때문에 아마 접근 시 할당되고 앱이 종료시 해제 될 것이다. 실행 도중에 변수 값이 변경될 수 있기 때문에 Read-Write 형태로 저장된다. Stack 함수 호출 시 함수의 지역변수, 매개변수, 리턴값 등이 저장되는 공간. 컴파일 시점에 결정되고 함수가 종료되면 할당된 메모리도 해제 된다. 장점 C..
2023.12.28 -
Swift Package 만들기1. 프로젝트 생성Xcode > File > New > Package 를 선택하여 Swift Package 프로젝트를 만들자 Library를 선택하여 생성하면 아래와 같이 프로젝트가 생성된다. 2. 프로젝트 구조Package 파일과 Sources폴더 Tests 폴더로 나뉘게 된다 3. Packagepackage파일은 패키지 이름, 외부 의존성과 같은 package에 대한 정보를 가지고 있다.import PackageDescriptionlet package = Package( name: "MyLibrary", products: [ .library( name: "MyLibrary", targets: ["MyLibr..
[Swift] Swift Package 만들기Swift Package 만들기1. 프로젝트 생성Xcode > File > New > Package 를 선택하여 Swift Package 프로젝트를 만들자 Library를 선택하여 생성하면 아래와 같이 프로젝트가 생성된다. 2. 프로젝트 구조Package 파일과 Sources폴더 Tests 폴더로 나뉘게 된다 3. Packagepackage파일은 패키지 이름, 외부 의존성과 같은 package에 대한 정보를 가지고 있다.import PackageDescriptionlet package = Package( name: "MyLibrary", products: [ .library( name: "MyLibrary", targets: ["MyLibr..
2023.12.12