TIL
11 posts
Server Side Swift

Swift 의 ARC 와 GC(가비지 컬렉터)의 차이점 Swift의 ARC(Automatic Reference Counting)와 GC(Garbage Collection)는 메모리 관리를 자동화하는 두 가지 다른 방식입니다. 이 두 시스템은 프로그램이 더 이상 필요하지 않은 메모리를 자동으로 회수하여 메모리 누수를 방지하고 성능을 최적화합니다. 그러나 그 구현 방식과 동작 원리가 다릅니다. Swift ARC(Automatic Reference Counting) 1. 동작 방식: 2. 장점: 3. 단점: GC(Garbage Collection) 1. 동작 방식: 2. 장점: 3. 단점: 요약 이 두 메모리 관리 방식은 각각의 장단점이 있으므로, 애플리케이션의 요구 사항에 따라 적합한 방식을 선택하는 것이 중요합니다. Swift Vapor Init Example Project Initialize Model property wrapper _ @ID 는 Model 프로토콜에서 id 프로퍼…

Test Driven Development (테스트 주도 개발)

테스트 주도 개발 테스트 사용자에게 제공되기 전에 소프트웨어의 품질, 성능 등을 확립하기 위한 절차 수동 테스트의 비효율성 제품이 출시될 때 실제로 필요한 코드가 아닌 코드를 만들어야 하는 경우. 자동화된 테스트 소프트웨어로 다른 소프트웨어를 자동화 테스트 주도 개발 (Test Driven Development) 테스트 코드를 먼저 만들어놓고, 테스트하기 쉬운 소프트웨어 설계 예를 들어 개발자가 아닌 기획자도 경우의 수, 요구사항을 먼저 다 정의해놓고 시작. 필요한 모델을 먼저 구상 거기에 필요한 것을 하나씩 채워가며 ‘테스트’ 특징 단, 높은 응집력과 낮은 결합도를 가진 컴포넌트로 구성된 소프트웨어를 구축하게 됨 요구사항에 대한 이해도 향상에 도움이 됨 구현이 완료된 후 테스트를 작성하는 것보다 먼저 작성하는 것이 더 좋은데, 해당 동작에 대한 구현이 없을 때 테스트가 실패하는 것을 보면 향후 회귀를 잡아낼 수 있다는 것을 신뢰할 수 있기 때문 구현 후 테스트를 시작하면, 내가 …

에러 핸들링

에러 핸들링 Guard 진행하기 전에 무언가가 참인지 확인하기 위해 guard 문을 사용. do catch try?, try!

얼굴인식 사용하기

얼굴 인식 기능 실습 얼굴 인식 기능은 Vision framework 를 사용한다. vision Framework 여러 명의 얼굴을 인식할 수 있는 이미지를 준비한 뒤, 이미지를 분석할 analyzeImage 함수를 정의한다 얼굴 인식 VNImageRequestHandler An object that processes one or more image analysis requests pertaining to a single image. VNImageRequestHandler에는 core graphics Image, 줄여서 cgImage라는 싱글 이미지를 파라미터로 받는다. 그렇기 때문에 UIImage를 CGImage로 변환하여 VNImageRequestHandler를 초기화 한다. 이를 통해 단일 이미지를 Vision 프레임워크에 요청을 수행할 수 있는 핸들러를 인스턴스화할 수 있다. 그리고 이미지 안에 있는 페이스를 찾기 위한 요청(얼굴인식)인 VNDetectFaceRectangl…

음성 인식 사용하기

24-07-08 TIL Skip.tools SwiftUI 를 사용해서, iPhone과 Android를 동시에 개발할 수 있는 tool https://github.com/skiptools/skip 음성 인식 사용하기 Text To Speech Speech To Text Speech 프레임워크를 통해, 앱이 탭과 제스처를 보완하는 오디오 명령을 인식할 수 있음 음성을 텍스트로, 혹은 텍스트를 음성으로. 음성 인식 기능을 추가함으로써 앱을 누구나 쉽게 사용 할 수 있도록 함 (시각장애인 분들을 위한 앱 개발 가능) 마이크 액세스와 음성 인식 사용 권한 필요 Speech To Text App Speech Framework의 AudioEngine Object 에 대해서 알아야 한다. AVAudioEngine은 오디오 처리 그래프를 관리하는 객체로, 다양한 오디오 노드를 연결하여 오디오 신호를 처리합니다. 각 노드는 입력 및 출력이 있으며, 서로 연결되어 오디오 신호를 변환하거나 전달할 수 …

SwiftUI + UIKit

SwiftUI와 UIKit 같이 사용하기 아직 레거시 코드가 많기 때문에, UIkit 과 SwiftUI 를 같이 사용하는 경우가 있다. SwiftUI with UIKit SwiftUI 프로젝트에 UIKit 를 같이 사용하는 방법에 대해서 알아보겠다. 예를들어 Pdf 파일을 볼 수 있는 PDFKit의 PDFView 는 UIKit으로 되어있는데, 이걸 SwiftUI 프로젝트에서 사용하려면, UIViewRepresentable 프로토콜을 사용하면 된다. 그리고 그 ViewMe 를 SwiftUI 에 추가하면 끝이다. 이번에는 WebKit에 있는, WKWebView() 를 나타내기 위해서 UIViewRepresentable를 사용해보겠다. updateUIView 에서 load(URLRequest) 까지 다 하고나서, SwiftUI 에서는 WebView를 url과 함께 호출하면 된다. UIViewRepresentableContext Contextual information about the…

Photo, Camera App

Picture App Photo와 Camera 같이 사용자의 개인정보에 접근하기 위해서는 사용자로부터 권한 승인을 먼저 받아야 한다. info.plist에 NSCameraUsageDescription와 NSPhotoLibraryUsageDescription 의 값에 적절한 문구를 추가한다. SwiftUI 에서는 PhotosUI 라는 프레임워크로 사진에 쉽게 접근할 수 있지만, 이번에는 UIKit의 UIViewControllerRepresentable 코드를 사용해보고자 한다. 적용 예시 코드 Coordinator는 UIKit의 Delegate 패턴 등을, SwiftUI의 선언형 프레임워크의 패턴에 맞춰주도록 하는 애플에서 제공하는 기능이다. 다시 말해 UIRepresentable과 SwiftUI를 이어주는 class. PhotosUI 사용 photosUI PhotosUI 사용

AVFoundation-시작하기

AVFoundation-시작하기 오늘은 오디오/비디오를 다루기 위한 AVFoundation, AVKit 에 대해서 알아보고, ‘로컬 재생’의 간단한 예제를 통해서 다루어보았습니다. 주의 사항 대용량 미디어 파일의 앱 크기 영향 - (하루에 2~3만원 정도의 서버 비용이 발생할 수 있다.) 저작권 및 라이선스 확인 - (사용자가 불법적으로 컨텐츠를 사용하고 있지 않은지, 실시간 모니터링 운영 팀이 있어야 한다.) 접근성 고려 (자막, 오디오 설명 등) - AVAudioPlayer (Audio - Video Player) Audio App 그리고 만든 플레이어를 ContentView 에 적용한다. Video App GPU, HardWare 의 영향을 많이 받는 코드이기에, 따로 커스텀이 필요하지만, 간단히 Video 를 앱에서 재생해보는 코드를 작성해보았다. AVKit 을 사용하면 아주 간단하게 비디오를 추가할 수 있다. 아래 코드는 videoOverlay 를 추가하여, 비디오 위에 …

동기 vs 비동기 프로그래밍

Contents 프로세스와 스레드 동기 vs 비동기 프로그래밍 비동기 프로그래밍 구현 방법 GCD (Grand Central Dispatch) async await async await 를 사용할 때 주의점 프로세스와 스레드, 교착상태 이해하기 라면을 끓이는 과정으로 비유해서 이해할 수 있다. 프로세스와 스레드 CPU = 요리사: 요리사는 CPU처럼 주방에서 여러 요리를 처리하는 사람입니다. 프로세스 = 라면을 끓이는 과정: 라면을 끓이는 과정이 하나의 독립된 작업, 즉 프로세스입니다. 각 라면 요리는 독립적으로 수행되며, 다른 요리(프로세스)와 직접적으로 영향을 주지 않습니다. 스레드 = 작은 업무: 스레드는 프로세스 내에서 작은 작업들입니다. 예를 들어, 라면을 끓이는 과정에서 면을 끓이고, 국물을 만드는 것이 각각의 스레드라고 할 수 있습니다. 또 다른 예로, 게임을 다운받는 동안 브라우저의 다른 탭에서 작업하는 것이 스레드입니다. 이때, 스레드는 ‘주방 칼’처럼 하나의 자원…

2024 TIL (~24.05)

2024년 04월 06일 오늘 배운 내용 객체지향, 함수형 프로그래밍의 개념 이해 Swift 함수의 정의와 호출 오버로딩, 오버라이딩 오늘 푼 문제 짝수와 홀수 (프로그래머스) 오늘은 Swift 함수와 더불어 Swift의 언어적 특성에 대해서 기초부터 다시 공부하기 시작했다. ChatGPT에 너무 의존해서는 안된다. ChatGPT가 알려주는 정보가 틀릴 수 있기 때문이다. 나는 그 틀린정보를 구분할 수 있는 능력이 필요하고, 어떤 질문을 해야 좋을지 그 ‘바탕’이 되어줄 것이 필요하다. 좋은 코드를 짜기 위해서는 기본부터 다시 시작해서 배울 필요가 있다고 생각한다. 2024년 04월 07일 오늘 배운 내용 흐름 제어 (조건문, 반복문) 오늘 푼 문제 평균 구하기 (프로그래머스) 두 개 뽑아서 더하기 (프로그래머스) 느낀점 오늘 Swift로 문제를 풀면서 이중 반복문을 구현할 때 조금 헷갈렸다. 스위프트 프로그래밍 책을 다시 보면서 반복문, 흐름 제어 관련해서 다시 한번 꼼꼼히 공부…

Combine 시작하기

WWDC Introducing Combine Combine in Practice 해당 WWDC의 핵심 내용을 정리하면서, 내 프로젝트에 어떻게 적용할 수 있을지 고민해보았다. Introduction Reactice Programming? Observable User Input, sensor data, API response Observer An entity that listens to events emiited by observables. Application components, views Operators Functions to transform and manupulate data map, filter, merge Reactive Programming - Benefits Improved code readability Handling complex asynchronous scenarios Real-time and event-driven applications 비동기 프로그래밍의 …