일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- ssot
- 스켈레톤 통합
- 리액트 네이티브
- React-Native
- 리액트
- 360도 이미지 뷰어
- 뷰 정체성
- native
- privacyinfo.plist
- launch screen
- 파노라마 뷰
- 360도 이미지
- data driven construct
- 명시적 정체성
- 라이브러리 없이
- 구조적 정체성
- 3b52.1
- requirenativecomponent
- React Native
- react
- 네이티브
- SwiftUI
- 뷰 생명주기
- Android
- 앱 성능 개선
- react-native-fast-image
- 360도 뷰어
- panorama view
- ios
- launchscreen
- Today
- Total
목록전체 글 (59)
Neoself의 기술 블로그
저번 게시글에서는 책 검출 알고리즘에서 네이버 책 검색 api로부터 1개 이상의 데이터를 가져올 수 있는지 테스트를 진행하였습니다.결과에 대한 유사도를 연산해 정확도를 높히기에 앞서, 비교분석할 책 데이터가 하나도 없을 경우, 고도화 방향이 부재했기 때문입니다.1. 책 검색 api의 결과 반환 확률 높히기진행 결과, 37개 테스트 케이스 중 3개의 케이스에서 nil값을 반환, 즉 GPT가 추천한 3개의 책에 대해 검색 결과가 하나도 나오지 않음을 확인했습니다.XCTAssertEqual failed: ("false") is not equal to ("true") - 설국열차: 빙하기의 끝XCTAssertEqual failed: ("false") is not equal to ("true") - 브레이브 뉴 ..
tearDown(): 에러를 throw할 수 없습니다tearDownWithError() throws: throws 키워드가 있어 에러를 throw할 수 있습니다tearDownWithError(): Xcode 11.4부터 도입된 새로운 메서드입니다 Codable 프로토콜: Encodable과 Decodable 프로토콜을 함께 구현한 타입별칭(typealias) Encodable: 데이터를 JSON Plist 등의 형식으로 변환 가능한 프로토콜*Encoding: 데이터를 특정 형식으로 변환하는 과정(ex. String을 URL이나 Base64로 변환)struct User: Encodable { let name: String let age: Int // JSON으로 인코딩 let..
ChatGPT api를 활용해 사용자가 제시한 질문에 적합한 책을 추천하는 로직을 개발하면서 발생한 기술 도전과제의 해결과정을 정리한 글입니다.ChatGPT 반환값의 후가공 과정에 대한 이해도를 높히고자 하는 개발자분들께 도움이 되었으면 좋겠습니다. 0. 배경구현이 필요한 핵심로직은 아래 2개로 정리할 수 있습니다.책 추천: AI를 활용해 사용자의 질문에 답이 될 수 있는 책을 추천하고, 앱 내 서재 탭에 추가할 수 있도록 하기책 추가: 사용자가 책표지를 촬영할 경우, OCR촬영된 책 앱 내 서재 탭에 추가하기위 기능을 구현하기 위해선 결국 아래와 같은 기술적 고민으로 이어졌습니다.1. 사진촬영을 통해 책을 인식하는 로직2. ChatGPT로 책을 추천받는 로직1번과 2번 로직의 경우, ChatGPT만을 ..
1. 동시성동시성 프로그래밍은 엄밀히 따지면, 동시성과 병렬성을 모두 포함하는 개념이라고 볼 수 있습니다. 즉, 여러 작업을 동시에 처리하는 프로그래밍 방식입니다. 여기서 동시성 프로그래밍(Concurrent Programming)과 병렬성 프로그래밍(Parrallel Programming)의 가장 큰 차이는 무엇일까요? 둘다 여러 작업을 동시에 처리한다는 방향을 공유하고 있지만, 동시성이 한번에 하나의 작업을 번갈아가며 처리를 하는 방식이라면, 병렬성은 멀티코어 환경을 바탕으로 여러작업을 실제로 동시에 처리하는 방식을 일컫습니다.즉 동시성 프로그래밍은 소프트웨어적 쓰레드에서 동시에 일을 하는 개념이기 때문에, 보다 개발자 개입이 중요한 처리방식입니다. 아래 다이어그램을 보면 동시성과 병렬성의 동작방식..
이 글에서는 제가 클린 아키텍처를 공부하고, 이를 실제 프로젝트에 적용하면서 겪은 경험을 공유하고자 합니다. 클린 아키텍처 자체에 대한 이해도를 높히고 싶으신 개발자 분들께 도움이 되었으면 합니다. 배경Todo 앱을 개발하면서 가장 신경 쓴 부분은 오프라인 상태에서도 앱이 정상적으로 동작하는 것이었습니다. 사용자가 지하철에서 Todo를 추가하거나 수정하더라도, 네트워크가 복구되면 자연스럽게 서버와 동기화되어야 했죠. 이를 위해 CoreDataSyncService라는 동기화 전담 서비스를 구현했습니다. 하지만 시간이 지날수록 이 서비스는 점점 더 많은 책임을 떠안게 되었습니다. CRUD 작업마다 로컬 저장소 처리, 네트워크 요청, 위젯 업데이트까지... 모든 로직이 긴밀하게 얽혀있었죠.func update..
RxSwift는 ReactiveX 프로그래밍 패러다임을 Swift로 구현한 라이브러리입니다. 이 글에서는 RxSwift의 핵심 컴포넌트들이 어떻게 상호작용하며 동작하는지 실제 소스 코드를 통해 살펴보겠습니다. 아래 사진은 RxSwift 라이브러리의 내부 구현파일들의 의존성을 표현한 그래프입니다. 해당글을 통해 다루게 되는 파일들은 검정색 및 빨간색 줄처리하였습니다. RxSwift의 기본이 되는 타입 계층 구조는 다음과 같습니다:1. 핵심 타입 계층 구조1.1. ObservableConvertibleType모든 Observable 타입의 기본이 되는 프로토콜입니다.public protocol ObservableConvertibleType { associatedtype Element func as..
앱이 실행될 때, 성능에 영향을 주는 요소는 아래와 같이 나열해볼 수 있습니다.AllocationReference CountingMethod Dispatch 0.배경먼저 Swift가 제공하는 Value 타입과 Struct 타입을 먼저 설명드리겠습니다.값 타입 (Value Type)참조 타입 (Reference Type)structClassenumClosure기본 데이터 타입(Int, Double, String, Bool 등)Function컬렉션 타입들(Array, Dictionary, Set) 튜플 이 두 타입은 아래와 같은 차이가 있습니다. 1.1 메모리가 할당되는 위치값 타입: 실제 데이터가 Stack에 저장 참조 타입: 실제 데이터는 Heap에, 8바이트(운영체제 워드길이)길이의 데이터의 주소는 ..
안녕하세요. 본 게시글은 RxSwift 라이브러리의 공식문서 내용을 정리한 글입니다. RxSwift는 ReactiveX 라이브러리를 Swift 문법으로 사용할 수 있도록 제작된 라이브러리입니다.ReactiveX는 뭔가요?ReactiveX는 Microsoft사에서 제작된 라이브러리이며, 아래 문장으로 라이브러리를 소개하고 있습니다.옵저버블 스트림으로 비동기 프로그래밍을 돕는 API비동기 프로그래밍과 옵저버 패턴을 사용하기 쉽도록 돕는 라이브러리라고 이해하면 쉬울 것 같습니다.ReactiveX 배경ReactiveX의 동작방식은 Observable이 발행하는 하나 또는 연속된 항목에 Observer가 반응한다는 옵저버 패턴 기반의 동작원리에서 부터 시작됩니다.코드가 작성된 순서에 따라 실행되고, 완료되는 일..
시간복잡도에 가장 큰 영향을 주는 N값의 범위가 1let N = Int(readLine()!)!var arr = [Int]()for _ in 0..)print(arr[4])하지만, 위 코드로 성공했으면 실버 3이 아니겠죠. 위 코드의 시간복잡도는 아래와같이 분석해볼 수 있습니다. 1. 입력 처리 부분: 이중 For문으로 append() 실행O(N^2) 2. 정렬 부분 : sort()여기서 sort 메서드느 O( n log n )를 가지며, arr 크기는 N^2입니다O(N^2 * logN^2) = O(N^2 * 2logN) = O(N^2 * logN) 따라서 전체 시간복잡도는 아래와 같습니다.O(N²) + O(N² log N) + O(1) = O(N² log N) 그다음으로 시도해본 것은 우선순위 큐를 ..
오늘은 제가 출시한TyTE라는Todo 관리 앱에 오프라인 동기화 시스템을 도입하면서 배운 점들을 공유하고자 합니다. 특히 데이터 무결성 보장과 불변성 원칙을 지키면서도 사용자 경험을 해치지 않는 구조를 설계하는 과정에서의 고민들을 다뤄보겠습니다. 0. 기존 구현사항기존 TyTE의 모든 비즈니스 로직은 모두 네트워크 통신에 의존하고 있었습니다. 따라서, 네트워크 연결이 불안정하거나 없는 상황에서는 사용자가 할 일을 수정하거나 삭제하는 등의 기본적인 CRUD 작업도 수행할 수 없었습니다. 그러던 중, 일정관리를 보조하는 Notion 앱에서는 오프라인 상황에서도 일정 수정 및 이동을 지원하는 것을 보게 되었습니다. Notion을 사용하면서 오프라인 상황에서도 끊김 없이 작업할 수 있는 UX가 얼마나 중요한지..