일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- @sendable
- native
- requirenativecomponent
- 네이티브
- completion handler
- 리액트 네이티브
- panorama view
- 360도 이미지 뷰어
- 뷰 생명주기
- React Native
- 리액트
- 명시적 정체성
- 360도 뷰어
- React-Native
- launch screen
- 파노라마 뷰
- presentationbackgroundinteraction
- ssot
- Android
- 라이브러리 없이
- 스켈레톤 통합
- SwiftUI
- 뷰 정체성
- ios
- react-native-fast-image
- data driven construct
- 360도 이미지
- 앱 성능 개선
- 구조적 정체성
- Today
- Total
목록개발지식 정리 (83)
Neoself의 기술 블로그

앱이 실행될 때, 성능에 영향을 주는 요소는 아래와 같이 나열해볼 수 있습니다.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가 얼마나 중요한지..

이 글을 통해 전동 킥보드 대여 서비스 iOS 앱을 팀원들과 함께 개발하면서 겪었던 경험과 기술적 고민들을 공유하고자 합니다. 가장 먼저 전동 킥보드 대여 서비스를 만들기 위해 사용했던 기술 스택입니다.1. 기술 스택UI Framework: UIKit, SnapKitArchitecture: Clean Architecture + MVVM/MVCState Management: CombineDatabase: CoreDataMap Services: MapKit, CoreLocationSecurity: CryptoKit (비밀번호 암호화)2. 아키텍처 설계2.1 Clean Architecture와 각 레이어프로젝트를 시작하면서 가장 큰 고민은 아키텍처 설계였습니다. 초기에는 단순 MVC 패턴으로 시작했지만, 다음..

이 글은 제가 개발한 TyTE 앱의 캘린더 위젯 구현 과정을 공유하기 위해 작성한 글입니다. WidgetKit을 처음 사용하고자 하는 개발자에게 도움이 되었으면 합니다. 1. WidgetKit의 핵심 구성요소 이해 struct CalendarWidget: Widget { let kind: String = "CalendarWidget" var body: some WidgetConfiguration { ... }}가장 먼저 위젯을 구현하기 위해서는 아래 요소들로 구성된 Widget 프로토콜을 최상단 뷰에 상속해야합니다.- 필수) WidgetConfiguration을 반환하는 body 속성- 필수) kind 속성: 위젯의 고유 식별자 역할 / 인스턴스 구분, 상태 관리, 업데이트 처..

이 글은 SwiftUI 관련 WWDC 세션들의 주요 내용을 기초부터 심화까지 포괄적으로 다루고 있습니다. SwiftUI를 처음 접하시거나, 익숙치 않은 분들에게 도움이 되었으면 합니다. 0. 목차더보기1. SwiftUI 소개1.1 SwiftUI의 핵심 특징1.2 저수준 API1.3 앱 정의에도 사용되는 SwiftUI2. 선언형 UI의 특성2.1 예측 가능한 상태 관리2.2 스레드 안정성2.3 성능 저하 요소 최소화2.4 넓은 범위의 적응성(Adaptivity)3. SwiftUI의 상태 관리3.1 상태 기반 UI 뷰 업데이트 사이클3.2 Property Wrapper와 의존성 관리3.3 Single Source of Truth (SSOT)3.3.1 데이터 모델과 UI(ViewModel)의 분리3.3.2 데..
이글은 Tree구조의 알고리즘 문제를 풀고자할때, 제가 취했던 접근방식들을 정리하고자 작성한 글입니다. 미숙한 점이 아직 많지만, 정리가 되는대로 업데이트를 진행하고자 합니다. 알고리즘을 풀기 이전 가장 먼저 정해야할 것은 탐색 방식을 결정하는 것입니다.DFS: 경로찾기, 사이클 탐지와 같이 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 방식의 경우 사용BFS: 최단 경로 문제나 레벨 단위 처리와 같이 같은 레벨의 노드들을 먼저 탐색하는 방식의 경우 사용탐색방식이 결정되었다면, 어떤 패턴을 사용할 수 있는지 확인합니다.Bottom-up 접근최하단 노드부터 루트로 올라가는 방식:트리의 높이 구하기, 트리의 지름구하기와 같은 케이스에 유용Top-down 접근경로의 합구하기, 레벨 순회와 같이 루트에서 시..

컴퓨터 시스템의 구성요소CPU컴퓨터의 두뇌 역할을 하는 중앙처리장치로, 실제 연산과 명령어 처리를 담당합니다. 산술논리연산장치(ALU)와 제어장치(CU)로 구성되어 있습니다. RAM주기억장치로, CPU가 직접 접근할 수 있는 고속의 휘발성 메모리입니다. 실행 중인 프로그램과 데이터를 임시로 저장합니다. 저장장치HDD나 SSD와 같은 비휘발성 메모리로, 전원이 꺼져도 데이터가 유지됩니다. CPU와 메모리 간의 데이터 교환은 버스 시스템을 통해 이루어집니다. 여기서 버스는 전기적 신호를 전달하는 물리적 와이어들의 집합이라고 이해하면 쉽습니다. 버스는 아래와 같은 유형으로 나뉩니다.데이터 버스: 양방향 통신을 지원하며, CPU 및 다른 장치들 사이의 실제 데이터를 전송합니다.주소 버스(Address Bus):..
최근 iOS 앱의 소셜 기능 개발 과정에서 복잡한 API 호출 체인을 다루게 되었습니다. 사용자의 피드를 구성하기 위해 여러 API를 순차적으로 호출하고 데이터를 조합해야 했는데, Combine을 사용한 기존 접근 방식에서 여러 한계점을 경험했습니다. 이 글에서는 우리가 겪은 문제점들과 Swift Concurrency로의 전환을 통해 이를 해결한 과정을 공유하고자 합니다. 1. 기존 코드의 구조와 한계점소셜 피드를 구현하기 위해 다음과 같은 연쇄적인 API 호출이 필요했습니다:func fetchFriendsWithCalendarData(yearMonth: String) { isLoading = true // 1. 친구 목록 가져오기 socialService.getFriends() ..