본문 바로가기

학습 노트

(196)
191. Predicate Syntax Predicate Syntax NSPredicate(format: String, arguments: CVaListPointer) NSPredicate(format: "target LIKE %@", "value") 여러 생성자 중 위의 생성자의 사용 빈도가 가장 높다. pram1 : Format 문자열 : 해당 문자열을 사용해 검색 조건을 지정 "targer LIKE %@"은 target 속성에 저장된 문자열을 검색한다. LIKE는 문자열 비교에 사용되는 연산자이고, Format 문자열 자체는 대소문자를 가리지 않지만 LIKE와 같이 연산자 등에 해당하는 키워드들은 대문자로 작성하는 것이 관행이다. 두 개 이상의 공백은 하나로 취급한다. %@는 포맷 지정자로 Swift의 것과 동일하다. param2 : 포..
190. Predicate Predicate Spotlight, CoreData에서 검색조건을 나타낼 때 사용되는 Predicate는 기술의 종류, DB의 종류에 상관없이 검색조건 지정이 가능하다는 장점이 있다. 구현 자체에서 대소문자를 구분하진 않지만 키워드는 대문자로, 그 외엔 lowerCamelCase로 작성하는 것이 보통이다. predicate를 사용하면 데이터 전체를 context에 전달하는 게 아닌 predicate의 조건에 맞는 데이터만 context에 전달하기 때문에 속도 향상을 기대할 수 있다. PredicateViewController.swift fetch() employee의 데이터를 이름순으로 정렬해 list 배열에 저장 TableView 새로고침 searchBarSearchButtonClicked() 선택한..
Python #1 서론 홈페이지를 만들어 보겠다고 삽질할 때도, 앱을 만드는 중에도 이제는 머리가 굳은 건지 원래도 멍청했던 게 이제야 티가 나는 건지 슬슬 공부를 떠나서 프로젝트에 돌입하며 한계를 느끼기 시작했다. 보고 이해하는 것과 처음부터 내가 생각한 것을 구현하는 것은 상당히 큰 차이가 있다. 이걸 메꾸기 위해 다른 공부가 필요하다고 생각했다. Swift를 공부하고, 가장 많이 사용하기는 하지만 진입이 쉽고, 자료가 많기로는 Python을 따라가기 힘들다. 따라서 알고리즘 자체를 공부하고, 예제를 풀고, 이를 서로 공부하는 자리를 마련했는데, 사용하는 언어들이 다양하다 보니 같이 공부할 때는 Python을 사용하기로 결정했다. 한 녀석은 대학원생으로 Python을 이미 사용하고 있고, 한 녀석은 웹 개발자로의 취직..
187 ~ 189. Fetch Request Fetch : CoreData에서 데이터를 읽어 오는 것 Fetch Request : 읽어올 데이터의 종류, Filtering 조건, 정렬 방식 등을 포함하는 객체 Request로 불리는 이유는 이를 직접 처리하지 않고 Context에 요청하고, Context가 대신해서 이를 처리하기 때문 Fetch Request 생성하기 FetchAllViewController.swift class FetchAllViewController: UITableViewController { var list = [NSManagedObject]() @IBAction func fetch(_ sender: Any?) { let context = DataManager.shared.mainContext } override func vi..
187. Entity Hierarchy, Relationships Entity Hierarchy Student Employee name = name age = age address = address gender = gender grade salary course 위와 같은 Data Model에서 Student와 Employee의 name, age, address, gender 4가지의 Attribute가 동일하다. 이러한 경우 양쪽에 반복해 생성하기 보다는 공용으로 사용할 수 있도록 하는 것이 효율적이다. 이러한 것을 Entity 계층이라고 부르고, CoreData는 이것을 지원한다. 위와 같이 Person으로 공통된 Attribute를 분리하는 Entity를 생성하고, 필요한 Entity에서 이를 동일하게 사용하도록 구현하면 데이터 모델 구현에 필요한 시간이 감소 데..
186. Managed Object and Managed Object Context Managed Object and Managed Object Context Core Data의 데이터 처리 단위는 관점에 따라 두 이름으로 불린다. Model 관점 Context 관점 Entity Managed Object Context 관점의 Managed Object가 이번 포스팅의 목적이다. Managed Object는 NSManagedObject로 구현 돼있고, 해당 객체의 Life Cycle을 관리하는 주체가 Core Data이기 때문에 'Managed'라는 접두어가 붙는다. NSManagedObject를 상속받아 Entity Class를 만들어 사용하게 되면, 일반적인 Core Data의 Key-Vlaue 방식식이 아닌 속성을 사용해 Attribute에 접근 할 수 있다. 이는 코드가 단순해 ..
185. CoreData CoreData 앱을 종료해도 유지될 수 있도록 데이터를 '영구'히 저장하는데 사용함. 관계형 DB아닌 DB의 사용을 돕는 것에 목적을 둠. 이에 따라 Object Graph Management Tool 이라고도 함. DB에 대한 이해가 부족해도 간편히 사용할 수 있음. 모바일 환경에 최적화 돼 있으며, iOS와 Mac OS를 아울러 사용할 수 있음. 구성요소 영구저장 (Persistent Store) : NSPersistent Atomic Store Non-atomic Store XML Binary In-Memory SQLite 데이터 처리시 모든 데이터를 메모리에 Load 필요한 부분만 Load Object Model : NSManagedObjectModel 어떤 데이터가 저장되는지, 어떤 관계를 가..
183 ~ 184. NSCoding and Codable NSCoding Apple Developer Documentation developer.apple.com 생성자와 encode(with:) 메서드를 필수로 구현해야 하는 NSCoding 프로토콜은 Archiving과 Serialization을 구현하기 위한 필수 프로토콜이다. Decoding Binary 데이터를 객체로 변환 Encoding 속성(객체)을 Binary 값으로 변환 프로토콜은 위의 두 가지를 담당하게 된다. NSCoding은 NSObject를 상속해야한다. NSCoding 프로토콜을 채용하거나 구현해야한다. 객체를 저장할 수 있다. 단, 구조체는 불가능하다. 위의 세가지 특징과 한계를 가지고 있다. init() Apple Developer Documentation developer.appl..
181 ~ 182. User Defaults and Property List User Defaults (Default Database) 특징 Key - Value의 형태 메모리가 아닌 'plist'파일로 저장 직접 수정할 수 없고 반드시 UserDefaultClass를 사용해야 함 앱 실행시 병목 해소를 위해 Cache에 Load된 후 사용됨 위의 이유로 최대 4GB 까지 사용할 수 있는 것으로 안내되지만 KB급 이상에는 부적합 즉시 사용 가능 해당 형태로 변환 필요 Bool String Data Array Dictionary Data URL NSCoding saveData() let key = "sample" @IBAction func saveData(_ sender: Any) { // UserDefaults.standard.set("Hello", forKey: key) Use..
180. File Manager #3 Slide Action deleteDictionary(), deleteFile() func deleteDirectory(at url: URL) { do { try FileManager.default.removeItem(at: url) refreshContents() } catch { print(error) } } func deleteFile(at url: URL) { do { try FileManager.default.removeItem(at: url) refreshContents() } catch { print(error) } } 두 메서드는 같은 방식으로 구현된다. 대상 삭제 removeItem(at:) Apple Developer Documentation developer.apple.com 해당 메..