분류 전체보기 25

UIViewRepresentable View 레이아웃 업데이트 (UILabel Height 조절), SwiftUI lineBreakMode

SwiftUI로 프로젝트를 진행하면서 SwiftUI에서 제공해주는 기본 UIComponent로는 커스텀할 수 없는 영역도 분명 존재한다. 그래서 종종 UIKit에서 사용하는 컴포넌트를 SwiftUI View 구조체에 삽입하고는 하는데, 이때 발생한 트러블슈팅에 관련된 내용을 게시하려고 한다. SwiftUI에 UIKit의 UIView를 사용하려면 UIViewRepresentable 프로토콜을 채택한 struct를 사용해야한다. https://developer.apple.com/documentation/swiftui/uiviewrepresentable 기본적으로 UIViewRepresentable을 채택하면 해당 구조체는 다음 두 함수를 필수로 구현해야 한다. public protocol UIViewRepr..

회고 2024.02.05

TCA - Binding

개요 SwiftUI의 바인딩 타입은 애플리케이션의 서로 다른 부분 간의 통신을 용이하게 합니다. 따라서 SwiftUI에서 가장 중요한 유형 중 하나입니다. 이를 통해서 애플리케이션 중 일부의 변경사항을 즉시 다른 부분에 반역할 수 있고, @ObservedObject, @State 프로퍼티 래퍼 또는 environment 값을 사용하여 궁극적으로 바인딩 하도록 돕습니다. SwiftUI에서의 바인딩은 프로퍼티 래퍼로 양방향 바인딩을 사용하여 상태를 처리합니다. TCA의 가장 큰 특징은 단방향 데이터 흐름을 채택하는 것인데, TCA의 Store는 SwiftUI의 UI 컨트롤과 양방향 바인딩을 이루어야고, Store에 있는 State와 Action은 단방향 데이터 흐름을 갖도록하는 해야합니다. 이러한 것을 가능..

Swift 2023.08.17

정렬

정렬 어떤 데이터 그룹이 주어졌을 때 이를 주어진 순서대로 나열하여 재배치하는 행위 정렬은 이진 탐색의 전처리 과정이기도 하다. 정렬의 종류: 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬, 합병 정렬 안정 정렬 같은 값을 가지는 복수의 원소들이 정렬 후에도 정렬 전과 같은 순서를 가지는 것 버블 정렬 시간 복잡도: O(n^2) 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교차한다. 한번 순회할 때마다 마지막 하나가 정렬되므로 원소들이 거품이 올라오는 것처럼 보여서 버블정렬 이라고 한다. 과정 1회전 첫 번째 자료 7을 두 번째 자료 4와 비교하여 교환하고, 두 번째의 7과 세 번째의 5를 비교하여 교환하고, 세 번..

알고리즘 2023.07.19

TCA - Environment는 어디갔나?

Environment는 어디갔나? TCA는 State, Action, Reducer, Environment, View, Store를 기본 구성으로 갖는다. 이전 포스트에 위와 같은 말을 한 적이 있다. 근데, 예제를 설명하면서 State, Action, Reducer, View, Store 객체에 대한 설명은 했지만 Environment 객체는 찾아볼 수 없었다. (의존성이 객체 형식으로 Reducer에 주입된 것이 아니라 코드로 이어붙이기했다.) 이는 TCA가 최신 버전으로 Release 되면서 TCA 아키텍처를 코드로 정의할 때 아키텍처의 일부 구성이 변경되었기 때문이다. 지난 게시글의 예제 화면에 숫자와 이 숫자를 증가할 수 있는 + 버튼, 감소할 수 있는 - 버튼, 더 다양한 행동을 위해 탭 하면..

Swift 2023.07.10

TCA(The Composable Architecture)란?

최근에 TCA에 관련되어 자료조사할 일이 생겨서 TCA 공식 문서와 공식 업데이트, 개발 방향에 대해 공부한 것을 정리해보려고 한다. TCA pointfree에서 Brandon Williams와 Stephen Ceils가 만들어낸 아키텍처 TCA는 The Composable Architecture의 약자로서, 구성, 테스트 및 인체 공학적으로 개발자가 일관적으로 이해하여 애플리케이션을 구축할 수 있도록 도와주는 라이브러리이다. SwiftUI, UIKit 등 모든 Apple 플랫폼(iOS, macOS, tvOS 및 watchOS)에서 사용할 수 있다. The Composable Architecture can be used to power applications built in many frameworks,..

Swift 2023.07.06

NSCache 파일 key - value 설정 실수

토이프로젝트 진행 중 URLSession에서 가져온 이미지 데이터를 Filemanager, NSCache를 사용하여 기기 메모리 캐싱, 디스크 캐싱을 시도했다. 이미지를 View에 할당하는 과정은 다음과 같이 작동한다. NSCache로 메모리 캐시에서 이미지 파일을 검색 후 있으면 View에 이미지 할당하고 없으면 FileManader를 검사한다. FileManager로 디스크 캐시에서 이미지 파일을 검색 후 있으면 View에 이미지 할당하고 NSCache로 메모리 캐시에 이미지 파일을 저장한다. URLSession으로 파일을 다운한다. URLSession으로 이미지 파일을 서버로부터 다운 후 View에 이미지 할당하고 FileManager로 디스크 캐시에 이미지 파일을 저장하고 NSCache로 메모리 ..

실수 2023.06.19

DFS/BFS

탐색 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. DFS / BFS는 대표적인 탐색 알고리즘인데, 이 두 알고리즘은 스택과 큐의 자료구조로 구성된다. 스택 박스를 아래에서부터 위로 차곡차곡 쌓는 형태의 자료구조 - 선입후출 혹은 후입선출의 자료구조를 갖는다. 큐 대기 줄처럼 먼저 온 사람이 먼저 나가게 되는 형태의 자료구조 - 선입선출 구조의 자료구조를 갖는다. 재귀 함수 DFS / BFS를 구현하려면 재귀 함수를 알아야한다. 재귀 함수는 자기 자신을 다시 호출하는 함수이다. 재귀 함수의 종료 조건 재귀 함수는 함수 내에 종료 조건을 꼭 명시해야한다. 명시하지 않으면 무한 호출되어 프로그램이 정상작동하지 않게 된다. 재귀 함수의 수행은 스택 자료구조를 이용한다. 함수를 계속 ..

알고리즘 2023.06.19

HashTable

해싱(Hashing) 해싱이란 임의의 길이의 값을 해시 함수를 사용하여 고정된 크기의 값으로 변환하는 작업 해시 테이블(HashTable) 해싱을 사용하여 데이터를 저장하는 자료구조를 해시 테이블이라고 한다. 해시함수를 사용하여 변환한 값을 색인(index)로 삼아 키(Key)와 데이터(Value)를 저장하는 자료구조다. 해시 테이블 특징 순차적으로 데이터를 저장하지 않는다. Key를 통해서 Value를 얻을 수 있다. → 기본 연산(삭제, 삽입, 조회)의 시간 복잡도가 O(1)이다. 커다란 데이터를 해시해서 짧은 길이로 축약할 수 있기 때문에 데이터를 비교할 때 효율적이다. Value는 중복 가능하지만 Key는 고유한 한 개의 값이다. 보통 배열로 정의한다. 해시 함수 해시 함수에서 중요한 것은 고유한..

자료구조 2023.06.06

Stack, Queue

Stack 데이터를 일시적으로 저장하기 위해 사용되는 자료구조로, 데이터의 삽입과 삭제가 한쪽 끝에서만 일어나는 선형 자료구조이다. 가장 마지막에 삽입된 데이터가 가장 먼저 삭제되는 후입선출(Last-In-First-Out, LIFO)의 구조를 가지고 있다. 스택은 배열이나 연결 리스트로 구현할 수 있다. 스택은 일상 생활에서 쉽게 떠올릴 수 있는 예시로, 책을 쌓아놓는 책상이나, 접시를 쌓아놓는 상태에서 가장 위의 접시를 사용하는 것과 같은 구조를 가지고 있다. Stack의 활용 스택은 주로 함수 호출, 괄호 검사, 수식 계산 등에서 사용 수식 계산시 후위 표기법을 이용하여 수식을 스택에 쌓아 계산 가능 Stack의 연산 데이터 삽입 - push 데이터 삭제 - pop 데이터 반환 - top Stack..

자료구조 2023.05.16

Tree

계층적인 구조를 나타내기 위한 자료구조로, 하나의 루트(Root) 노드에서 시작하여 다수의 자식(Child) 노드를 가질 수 있으며, 각 자식 노드는 다시 하위 자식 노드를 가질 수 있는 구조이다. 노드 트리에서는 노드(Node)라는 개념이 중요한데, 각 노드는 데이터를 저장하는 역할을 하며, 다른 노드들과 링크(Link)로 연결되어 있다. 루트 노드는 트리의 시작점을 나타내며, 자식 노드는 부모 노드에서 링크로 연결된 하위 노드를 의미한다. 트리 용어 루트 노드(root node): 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다. 단말 노드(leaf node): 자식이 없는 노드, ‘말단 노드’ 또는 ‘잎 노드’라고도 부른다. 내부(internal) 노드: 단말 노드가 아닌 노드 간선(edge..

자료구조 2023.05.13