앱에서 로그인 후 서버에서 반환되는 accessToken과 refreshToken을 저장하려고 하는데, CoreData에 저장을 하기에도, UserDefaults에 저장을 하기에도 약간 애매해서 KeyChain에 저장을 하려고 한다 UserDefaults가 키와 값으로 저장하고 불러오는 것처럼 키체인도 사용할 수 있는데, 다만 키체인은 키와 값 형태의 데이터와 속성들을 묶어서 사용한다 사용방법은 간단하게 이 정도로 차이 난다 키체인 서비스 KeyChain Service 사용자를 대신해서 안전하게 작은 데이터 조각을 저장할 수 있다 디바이스 안에 암호화된 데이터 베이스라고 생각하면 된다 KeyChain Service API는 다양한 상황에서 여러 형태의 데이터를 암호화된 데이터베이스에 저장할 수 있는 메커..
애플 로그인을 구현한 후, 첫 로그인을 하면 애플 서버에는 유저가 해당 앱에 가입한 것처럼 설정되지만 (아이폰 기준, 설정 - Apple ID - 암호 및 보안 - Apple로 로그인 - Apple ID를 사용하는 앱에서 확인 가능) 서비스를 하고 있는 서버에도 유저 정보를 저장해야하기 때문에(가입) 서버로 값을 전달해줘야 한다 서버 쪽에서 어떻게 확인하는지 내가 서버개발자가 아니기 때문에 잘은 모르지만, 첫 로그인 시 확인할 수 있는 authorization.credential as? ASAuthorizationAppleIDCredential 값 중 identityToken과 authorizationCode를 서버로 전달해서 확인해야 한다 다른 포스팅에서는 userIdentifier, fullname이..
이전 포스팅에서는 Object에 값을 다 채워서 데이터를 저장했다. 모든 값이 채워지지 않은 Object를 저장하면 어떻게 될까? nil이 포함된 저장 car.setValue(myCar["brand"], forKey: "brand") // car.setValue(myCar["color"], forKey: "color") car.setValue(myCar["price"], forKey: "price") 위와 같은 코드로, 일부 값을 비워서 저장해보자 value를 주지 않고 저장하면 해당 값이 nil로 들어가게 된 것을 알 수 있다. Entity의 속성의 optional 유무 그럼 Entity의 속성들은 기본적으로 optional일까? guard let newcar = try? context.fetch(Ca..
Core Data 데이터 저장하기 Car Entity를 만들어놓았으니, 데이터를 한번 저장해 보자 let myCar: [String: Any] = ["brand": "KIA", "color": "black", "price": 3000] 뷰 컨트롤러에 다음과 같이 딕셔너리 형태의 저장하고자 하는 값을 만들어주었다 이전 포스팅에서 context는 인스턴스들의 변화를 추적한다고 했다. 메서드라고 생각하면 편하지 않을까? 저장하는 메서드를 사용하기 위해서 context를 사용해야 하고, context 역시 다른 인스턴스들과 함께 container에 포함되어 있다 현재 persistent container는 AppDelegate에 있다 AppDelegate의 persistent containser에서 contex..
! 공식문서를 참고한 글입니다 https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack Core Data Stack Core Data 모델 파일을 만든 후(https://modelinspring.tistory.com/90), 앱의 모델 레이어를 협력 지원하는 클래스를 설정해보자 이 클래스들은 Core Data Stack이라고 한다 NSManagedObjectModel의 인스턴스는 앱의 모델 파일을 나타내며, 앱의 타입, 프로퍼티들, 그리고 관계들을 설명한다 (구조체나 클래스처럼, 말 그대로 설명하는 그 자체) NSManagedObjectContext의 인스턴스는 앱 타입들의 인스턴스의 변화들을 추적한다 (메서드? cre..
CoreData를 사용하기 위해서는 프로젝트 생성시에 Use Core Data를 체크하면 되지만 프로젝트 중간에 CoreData를 추가하게 되었다 프로젝트 중간에 CoreData 추가하기 Data Model 파일 생성하기 [command + N] 또는 [File] - [New] - [File...] 으로 Core Data의 Data Model 파일을 만들어준다 .xcdatamodeld 확장자의 파일이 생긴 것을 확인할 수 있다 AppDelegate 수정하기 AppDelegate를 그 다음으로 수정해주어야 한다 CoreData를 import해주고, import CoreData // MARK: UISceneSession Lifecycle 메서드들 다음에 아래 코드들을 추가해주자 // MARK: - Core ..
퍼사드 패턴이란? 서브 시스템을 감싸고 단순한 인터페이스를 제공, 복잡한 시스템 구조를 단순화하는 패턴 건물의 정면(Facade)을 의미 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체 간편한 메소드 제공 간단히 말하면 특정 행동을 위해 필요한 여러 서브 클래스들의 기능을 퍼사드라는 클래스로 단순화해서 쉽게 사용할 수 있게 한 것 서브 클래스들의 많은 기능을 다 가져오는 것이 아니라 퍼사드 클래스의 목적 수행을 위해 필요한 기능들만 가져와서 단순화함 퍼사드 패턴의 구성요소 퍼사드 클래스 서브 시스템들을 단순화하는 역할을 함 클라이언트는 서브시스템들과 직접 소통하는 것이 아니라 퍼사드 클래스만 사용함 -> 클라이언트는 서브시스템의 내부 구조를 알 필요가 없음 서브시스템 클래스 퍼사드 클래..
Delegate 패턴????? 객체 지향 프로그래밍에서 많이 사용되는 디자인 패턴 중 하나 객체 간의 상호작용을 할 때 사용함 위임하는 객체와 대리하는 객체로 구성됨 대리자 객체는 위임자 객체에서 호출이 가능한 메서드를 구현함 이를 호출하는 위임자 객체는 대리자 객체의 메소드를 대신 호출함 객체산 결합도를 낮출 수 있고, 유연하고, 확장 가능한 코드를 작성할 수 있게 됨 Swift에서 Delegate 패턴을 사용하는 방법 1. 프로토콜 정의하기 protocol SomeDelegate: AnyObject { func someMethod() } 2. 위임자 객체 생성하기 class SomeClass { var delegate: SomeDelegate? func someMethod() { delegate?.s..
[Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(1) [Swift/iOS] 메모리 안전성 Memory Safety From 공식문서(2) ! 공식문서를 참고한 글입니다 메모리에 접근할 때, 충돌을 피하는 코드를 구조화 하는 법 기본적으로 스위프트는 코드에서 일어나는 언세이프한 행동을 방지함 예를 들어 스위프트는 변수를 사용 전에 초기화시키는 것, 메모리는 해제 된 뒤에 접근할 수 없는 것, 배열 인덱스가 범위를 벗어났는지 체크하는 것 들을 보장함 대부분의 경우에는 스위프트가 메모리를 자동으로 관리하기 때문에 이를 생각할 필요는 없지만, 충돌이 발생할 수 있는 경우를 알고, 그것을 예방하는 코드를 작성할 줄 알아야함 충돌이 일어난 경우에는 컴파일 오류나 런타임 오류가 발생할 ..
! 공식문서를 참고한 글입니다 In-Out Parameters 함수의 매개변수는 기본적으로 상수 실수로 파라미터의 값을 바꿀 수 없게 되어있고, 이를 바꾸려고 하면 에러가 발생함 함수의 매개변수를 수정하고 함수가 끝난 뒤에도 이를 지속하려면 inout 파라미터로 정의해야함 func printName(name: String) { name = "가짜 이름" // 에러 발생 Cannot assign to value: 'name' is a 'let' constant print(name) } name 파라미터는 상수이기 때문에 바꿀 수 없다고 에러 뿜뿜 inout 파라미터는 이미 정의된 변수를 파라미터로 받고, 그 변수를 바꿀 수 있게 만들어줌 따라서 상수를 받을 수 없음 사용할때는 함수를 호출할 때 &문자를 같..
- Total
- Today
- Yesterday
- inout 파라미터 메모리 충돌
- 메모리 안정성
- 강한 참조 순환
- 클로저 축약
- authorizationCode
- escaping closrue
- SWIFT
- 캡쳐리스트
- Persistent Container
- weak
- identity Token
- object
- Delegate 패턴
- ios
- 회원가입
- Entity
- 클로저표현
- 강한참조순환
- 클로저 강한 참조
- 디자인패턴
- 클로저
- 토큰저장
- autoclosure
- ASAuthorizationAppleIDCredential
- unowned
- core data
- context
- Core Data Stack
- CoreData
- 자동클로저
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |