KeyChain & 암호화
·
면접준비
iOS개발자로서 데이터를 안전하게 관리하는 것은 필수적인 역량입니다. UserDefault는 설정같이 가벼운 데이터를 저장하는데 적합했지만 비밀번호같은 민감한 데이터를 저장하면 보안 위협이 큽니다.요기서 잠깐!! 왜UserDefault는 위험할까?UserDefault는 key -value 형태로 데이터를 저장하여 plist 파일로 즉 샌드백스 내에 존재한다. 즉 앱이 삭제되면 데이터도 사라짐.UserDefaults는 암호화되지 않아있음. 예를들어 탈옥된 디바이스에서 중요 정보를 빼갈 수 있음.그래서 UserDefault는 속도와 편의성을 목적으로 사용되는 것.KeyChain?apple이 제공하는 보안프레임워크. 디바이스 안에 암호화된 데이터 저장공간.로그인 및 암호(해시), 결제데이터, 등 비밀 유지하고..
Combine(2)- Operator
·
반응형프로그래밍
Operatorpublisher가 방출하는 데이터 스트림을 가공하거나 제어하는 강력한 도구1. Map: publisher의 모든 요소를 변환하여 새로운 스트림으로 방출Map과 ForEach차이- 반복을 하는 것은 똑같지만 ForEach는 여기서 부터 여기까지 반복을하겟다 명시라면 map은 바꾸겟다라는 명시. 물론 ForEach에서 변환할수 있다= 이것자체가 Map . 다른사람이 봤을때 Map이 있으면 아~ 바꾸려나 보다~~ 이해할수 있다. 2. tryMap : Map과 같지만 클로저 오류발생시키면 Publish 종료3. compactMap: nil을 제외하고 nil이 아닌것만 publish4. replaceNil : nil들을 내가 원하는 element로 변환5. scan: 아래와 같이 더한다. 누적 ..
Queue 10845 - swift
·
알고리즘
큐 구현이다. swift로는 큐를 어떻게 구현하는지를 물어보는 거였다. // // main.swift // Queue // // Created by 235 on 2023/09/05. // import Foundation struct Queue{ var queue: [Int] = [] public var size: Int { return queue.count } public var isEmpty: Bool { return queue.isEmpty } public var front: Int { return isEmpty ? -1 : queue[0] } public var back: Int { guard let last = queue.last else {return -1} return last } mutati..
1259 - swift로풀기
·
알고리즘
오랜만에 돌아왔습니다 ㅠㅠㅠ 한동안 알고리즘을 놓다가 다시 잡게 되었네요. 이전까지는 주로 난이도 있는 것들을 파이썬으로 푸는 풀이들을 올렸었는데 리뉴얼을 했습니다!!! 올해 마치고 바로 취업에 목표를 둔것이 아니기에 swift로 차근차근 난이도를 높여가며 풀어과는 과정을 이제부터 올릴 예정입니다. 대망의 첫문제는 바로 유명한 팰린드롬수! 문제의 이해는 브론즈1로 낮기에 바로 풀이로 들어가겠습니다. // // main.swift // Algoritm // // Created by 235 on 2023/09/04. // import Foundation var arr: [String] = [] while true { var input = readLine()! if input == "0"{ break }els..
TaskGroup
·
면접준비
TaskGroup뭐 간단한 병렬실행이면 async let을 써주면 된다. 하지만 이게 수없이 많다면? async let 계속쓸래??또한 static하게 결정된 task에서만 쓸수 있다. 왜? 우리가 async let 으로 다 일일이 해줘야하기에!!만약 모든 이미지를 가져와야하는경우 필요한 개수를 미리 알수 있을까?⇒ nono 그건 컴파일시점에 알수 있는것이 아닌 런타임 시점에 알수 있다.런타임때마다 달라질수 있는 child Task들을 동적으로 만들어줄수 있다!! 😆 😆 😆Taskgroup을 만들기 위해서는 withTaskGroup(of:returning:body:)를 호출!throwing taskgroup → withThrowingTaskGroup(of:returning:body:) 에러던질때! ..
Swift Concurrency - Async/Await⭐️
·
면접준비
GCD의 문제점Thread Explosion : 내가 쓰레드들을 만들수 있어서 수많은 쓰레드속에서 switching이 필요하다. 우리가 왜 쓰레드를 만들었지? 프로세스 context swiching 때문에. 그런데 쓰레드가 너무많이생기면 문제. CPU는 이전 쓰레드에서 새 스레드로 전환하려면 전체 쓰레드 컨텍스트 스위치 해야함.memory overhead: 블락된 쓰레드는 재실행을 기다리는 동안 메모리, 리소스를 가지고 있다->불필요한 메모리 점유Priority inversion: Qos(Quality of Service)는 특정 작업의 우선순위를 높이면서 다른 낮은 우선순위의 작업을 방해할 수 있다. 예를들어, 중요한 UI작업이 낮은 우선순위백그라운드작업에 의해 지연될 가능성있다.비동기 코드가 실행되면..
ARFaceTrackingConfiguration()
·
ARkit
1. 먼저 기기에서 지원을 확인을 하는지 Appdelgate에서 확인을 한다. if !ARFaceTrackingConfiguration.isSupported { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) { let alert = UIAlertController(title: "Unsupported Device", message: "This app requires TrueDepth Camera with iOS 11.0+", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Close", style: .default) { action in exit(0) }) self.window?.ro..
Combine3-Cancellable
·
반응형프로그래밍
Combine을 공부하다보면 Cancellable이라는 프로토콜을 자주 만나게 된다. 먼지도 모르고 그냥 쓰는 것은 내가 제일 싫어하는 것이기에 공부 바로 시작Cancellable"A protocol indicating that an activity or action supports cancellation."취소를 지원하는 활동 혹은 액션을 나타내는 프로토콜..? 이거 보고 이해하는 사람 있나여? 일단 나는 아님Combine에선 이벤트 스트림을 action이라하는데 이 것을 취소할수 있는 프로토콜이라고 한다.public protocol Cancellable { func cancel()}실제로는 구독의 라이프사이을 관리하는 매커니즘을 제공합니다.구독을 취소하면?:- 퍼블리셔는 더 이상 값을 생성하지 ..