전체 글 45

[Core Data] Delete Rule을 이해하고 적절하게 사용해보자!

이번 포스팅에서는 제가 Core Data를 사용하여 Relationship을 만들 때, 항상 그냥 지나쳤던 Delete Rule에 대해서 이해하고, 이를 적절히 사용하는 방법에 대해 정리하려고 합니다. NSDeleteRule 우선 Delete Rule! 애플 공식 문서를 먼저 확인해보면 NSDeleteRule이라는 Enumeration으로 정의되어 있는 것을 확인할 수 있습니다. enum NSDeleteRule : UInt, @unchecked Sendable 정의되어 있는 case들을 살펴보면 noActionDeleteRule nullifyDeleteRule cascadeDeleteRule denyDeleteRule 모두 Core Data의 model editor에서 Relationship을 생성하고,..

CoreData 2023.01.26

[AutoLayout] LayoutGuide 활용하기

@MainActor class UILayoutGuide : NSObject 공식문서에 따르면 LayoutGuide는 AutoLayout과 상호 작용할 수 있는 직사각형 영역입니다. 이전에 'dummy view', 'placeholder view'와 같이 원하는 Layout을 위해 만들었던 View들 대신, 더 안전하고, 효율적인 직사각형 영역을 만들어주는 방식입니다. 주로 사용해본 UIKit의 Layout Guide 들은 간단하게 살펴보고, 직접 UILayoutGuide를 만드는 것을 중점적으로 글을 작성하겠습니다. 제공해주는 Layout Guides Safe Area layout guide 첫 번째로 가장 많이 사용하고 있는 Safe Area layout guide입니다. navigation bar, ..

iOS 2022.12.29

Design Pattern, RxSwift ) RxFlow 맛보기 - 1

RxFlow? RxFlow는 Reactive Flow Coordinator pattern을 기반으로 한 iOS 앱의 navigation framework입니다. Why use RxFlow? Storyboard를 더 작은 단위로 잘라내어 UIViewController들의 reusability와 collaboration이 가능하도록 해줍니다. navigation context에 따라 UIViewController가 나타나는 방식을 다양하게 가져갈 수 있습니다. 의존성 주입(Dependency Injection)을 편리하게 구현할 수 있습니다. UIViewController에서 모든 navigation과 관련된 코드를 없앨 수 있습니다. navigation 코드도 Reactive Programming이 가능하..

Design Patterns 2022.07.19

Setup Vulkan on VSCode and macOS

Vulkan을 mac에서 사용해보고 싶어서 그리고 Xcode가 아닌 VSCode에서 사용하는 법을 포스팅해보려고 합니다. Vulkan tutorial에는 Xcode밖에 안나와서... 저는 VSCode로 하고싶어서 한번 시도해봤습니다 ㅎㅎㅎ 우선 GLFW, GLM 그리고 VulkanSDK를 다운 받은 상태라고 생각하여 진행하겠습니다. GLFW, GLM 설치법 (https://vulkan-tutorial.com/Development_environment) VulkanSDK 설치 (https://vulkan.lunarg.com/) Create workspace 우선 저는 VSCode에서 Vulkan_Blog라는 폴더를 생성했습니다. 그리고 main.cpp 파일도 하나 만들어주겠습니다. Set tasks.jso..

Vulkan 2022.06.27

Swift ) Two-Phase Initialization?

이번 포스팅에서는 Swift의 Two-Phase Initialization에 대해서 알아보겠습니다. class SomeSubClass: SomeSuperClass { let someProperty: String init(someProperty: String) { super.init() } } 제가 Two-Phase Initialization을 가장 많이 접할 수 있는 코드는 바로 위와 같이 코드를 작성할 때였습니다. 위의 코드를 작성하면 바로 문구가 하나 뜨는데 Property 'self.someProperty' not initialized at super.init call 이런 문구입니다. 과연 왜 self.someProperty가 super.init 호출 시점에 초기화되어있지 않다고 코드를 빌드조차 ..

Swift 2022.05.27

CoreData ) Core Data stack에 대해서

Core Data stack은 Core Data의 이점을 모두 가져가며 Core Data를 사용하기 위해 필수적으로 알아야 할 부분이라고 생각됩니다. 이번 포스팅에서는 Core Data stack을 이루고 있는 클래스들을 공식문서를 바탕으로 정리해보도록 하겠습니다! 우선 Core Data stack의 이해를 위해 정리해볼 클래스들을 나열해보자면, NSManagedObjectModel NSPersistentStoreCoordinator NSPersistentStore NSManagedObjectContext NSPersistentContainer 이정도가 있겠습니다. 하나하나 알아보도록 하겠습니다. NSManagedObjectModel NSManagedObjectModel, Core Data 앱 개발을 시..

CoreData 2022.05.06

CoreData ) NSSecureCoding (정말정말정말 간단하게 알아봄)

CoreData의 Transformable 타입을 알아보다가 NSSecureCoding이라는 녀석을 만나고 한번 살펴보다가 엄청난 Objective-C 개념들을 만나고 우선은 공식문서의 내용에 대해서만 정리하도록 마음먹었습니다. 😅 😅 😅 NSSecureCoding? A protocol that enables encoding and decoding in a manner that is robust against object substitution attacks. - Apple Developer Document - Object Substitution 공격에 맞서기 위한 강력한 Encoding, Decoding 방식을 가능하게하는 프로토콜입니다. 음.... 직접 코드로 작성하며 이 NSSecureCoding이..

CoreData 2022.05.04

Swift ) Designated Initializer, Convenience Initializer

Designated Initializer? designated initializer는 클래스의 기본적인 이니셜라이저입니다. 보통 클래스에서 이니셜라이저를 생성하면 작성하게 되는 init(parameters) { statements } 이런 형태를 가진 이니셜라이저를 designated initializer라고 합니다. 클래스는 상속이 가능하기에, 이 designated initializer는 정말 중요한 역할을 합니다. 바로 상위 클래스(super class)의 이니셜라이저를 delegate하는 역할을 수행할 때 사용하기 때문입니다. class User { let email: String let name: String let authority: String init(email: String, name: ..

Swift 2022.05.02

CoreData ) .xcdatamodeld?

.xcdatamodeld 파일 CoreData를 활용하여 Data Model을 만들면 .xcdatamodeld 확장자를 가진 파일을 쉽게 찾아볼 수 있습니다. 이번 포스팅에서는 .xcdatamodeld 파일이 어떤 역할을 하는지에 대해 정리해보려고 합니다. d 의 의미 .xcdatamodeld 에서 .xcdatamodel 이라면, datamodel 확장자 같은데, 뒤에 d가 하나 더 붙으면서 이 의미가 궁금해지게 만들고 있습니다. .xcdatamodeld 에서 d의 의미는 document (Document Package) 라는 의미를 가지고 있습니다. (Document Package에 대한 설명은 아래의 참고문서에 남겨놓겠습니다.) 즉, 우리는 CoreData를 사용할 때, 이 Versioning을 지원..

CoreData 2022.04.26

Swift ) Difference between components and split

저는 주로 백준 온라인 저지의 알고리즘 문제를 풀 때, split 메서드를 사용하여 인풋을 공백 단위로 받아오곤 했는데, components를 사용하는 방법도 있어 아래와 같이 두 가지 코드를 번갈아가며 사용했었습니다. let input = readLine()?.split( ... ) let input = readLine()?.components( ... ) 이번 포스팅을 통해 두 메서드의 차이점을 한번 알아보도록 하겠습니다. components return [String] split return [Substring] 가장 눈에 띄게 확인할 수 있었던 차이점은 리턴타입입니다. func components(separatedBy separator: T) -> [String] where T : StringPr..

Swift 2022.04.19