본문 바로가기

전체 글

(9)
iOS 17에서의 URL 사용시 유의점 URL(string:) init(string:) | Apple Developer Documentation Creates a URL instance from the provided string. developer.apple.com iOS 17에선 URL이 RFC3986 를 준수합니다. 여기서 주의해야할 점은 Now, URL automatically percent- and IDNA-encodes invalid characters to help create a valid URL. 이 부분입니다 기존 URL이 invalid 할 경우 자동으로 인코딩 한다는 점인데요, 따라서 iOS17에서는 종종 이중 인코딩이 되는 이슈가 생길 수 있습니다. 해결법 .addingPercentEncoding(withAllowedCharacters: .ur..
Refactoring 2판 Swift관점에서 이해하기 - 1 이번에 같이 일하는 동료 개발자 분과 함께 리팩토링 2판 - 마틴 파울러 책을 읽어보면서 느낀 점을 공유하는 스터디를 진행하기로 하였습니다. 책은 JS기준으로 쓰여있어서, 틈틈이 swift로 생각해보고, 책 내용을 요약하면서 제 생각도 같이 써 내려가 보려 합니다. 저자는 실제 코드 예시를 가장 앞장인 1장에 배치하여 리팩토링을 이해시키려 합니다. // plays.json 연극 정보 { "hamlet": {"name": "Hamlet", "type": "tragedy"}, "as-like": {"name": "As You Like It", "type": "comdy"}, "othello": {"name: Othello", "type": "tragedy"} } // invoices.json 공연료 청구서 ..
Sort에 관한 고찰 프로그래밍의 기본이라고 할 수 있는 sort, 오늘은 이 sort에 대해 탐구해보려 합니다. 정렬 알고리즘에는 여러가지가 있습니다. Bubble Sort Selection Sort Insertion Sort Merge Sort Quick Sort Heap Sort Radix Sort Counting Sort 하이브리드 정렬 Timsort ( Insertion + Merge) Introsort (Quick + Heap) 등등.. 이중에서 최고의 정렬은 무엇일까요 최고의 정렬이란건 없습니다. 상황에 적합한 정렬이 있을 뿐입니다. 1. 메인 메모리에 데이터가 들어가는가? 안된다면 외부 정렬 알고리즘을 써야합니다. 주로 이런 알고리즘은 Quick sort와 Merge sort를 기반으로 합니다. ( 또한 SSD..
iOS) UICollectionView custom layout에 대한 고찰- 2 (UICollectionViewCompositionalLayout) iOS) UICollectionView custom layout에 대한 고찰- 1 (UICollectionViewFlowLayout, UICollectionViewLayout) iOS) UICollectionView custom layout에 대한 고찰- 1 (UICollectionViewFlowLayout, UICollectionViewLayout) Collection View에서 복잡한 레이아웃을 다루기 위해선 Custom Layout을 적용시켜야 합니다. 오늘은 Custom Layout을 탐구해보려 합니다. 데이터 레이어와 프레젠테이션 레이어가 분리되어있고 레이아웃으 demian-develop.tistory.com 이전 글에 이어서 오늘은 iOS 13부터 사용 가능한 UICollectionViewC..
iOS) Swift의 Time complexity에 관한 고찰 API의 시간 복잡도(Time complexity)에 대해 이해하고 있으면 보다 성능이 우수한 앱을 만들 수 있습니다. 이에 대해서 Swift의 Collection Types의 Method나 Property의 Time complexity에 대해 정리해 보겠습니다. mutating 하는 Method는 Copy on Write를 고려해주셔야 합니다. 기준은 최대한 공식문서를 참고했습니다. 혹시 틀린 점이 있다면 댓글로 알려주시면 감사하겠습니다. Array append(_ newElement: Element) 평균 시간 복잡도는 O(1)입니다. 최악의 시간복잡도 O(N)입니다. 최악의 상황은 메모리를 재할당 해야 할 때입니다.(C++ Vector와 유사, exponential로 크기가 증가합니다.) appen..
iOS) UICollectionView custom layout에 대한 고찰- 1 (UICollectionViewFlowLayout, UICollectionViewLayout) Collection View에서 복잡한 레이아웃을 다루기 위해선 Custom Layout을 적용시켜야 합니다. 오늘은 Custom Layout을 탐구해보려 합니다. 데이터 레이어와 프레젠테이션 레이어가 분리되어있고 레이아웃으로 뷰의 배치를 결정합니다. (책임이 잘 분리되어 있습니다.) CollectionViewFlowLayout CollectionViewFlowLayout는 애플이 제공하는 UICollectionViewLayout의 한 유형입니다. 애플은 최적화와 추상화가 잘 되어있기 때문에 가능하면 FlowLayout 사용을 권장하고 있습니다. Flow Layout인 이유는 그림으로 설명드리겠습니다. 스크롤의 방향에 따라 선을 기반으로 가능한 한 많은 셀을 배치하고 다음으로 넘어갑니다. 다음은 Flow..
iOS) GCD에 대한 고찰 - 2(DispatchWorkItem, DispatchGroup, DispatchSemaphore, Concurrency Problems) iOS) GCD에 대한 고찰 - 1(Dispatch Queue) iOS) GCD에 대한 고찰 - 1(Dispatch Queue) iOS 개발을 하면서 멀티스레딩 작업이 필요할 때 사용하는 GCD에 대해 알아보려 합니다. 멀티스레딩 작업은 Operation으로도 할 수 있지만 이 글에선 GCD에 대해 다뤄보려 합니다. (Operation은 다른 글 demian-develop.tistory.com 이전에 썼던 글에 이어서 GCD에 대해서 글을 좀 더 써보려 합니다. 이 글에서는 DispatchWorkItem, DispatchGroup, DispatchSemaphore, Concurrency Problems에 대해 다뤄보겠습니다. DispatchWorkItem DispatchWorkItem는 Dispatch ..
iOS) GCD에 대한 고찰 - 1(Dispatch Queue) iOS 개발을 하면서 멀티스레딩 작업이 필요할 때 사용하는 GCD에 대해 알아보려 합니다. 멀티스레딩 작업은 Operation으로도 할 수 있지만 이 글에선 GCD에 대해 다뤄보려 합니다. (Operation은 다른 글에서 다뤄보겠습니다.), 직접적인 Thread 관리는 제대로 하기 굉장히 어렵기 때문에 대부분 API를 사용하게 됩니다. GCD에 대해 조금 깊게 이해하기 위해서는 Apple의 운영체제에서 Thread Programming, Concurrency Programming에 대해서 알고 있으면 좋습니다. 가볍게 훑어봤는데, 전산학 관련한 내용이 많아, 나중에 Thread 관련 글에서 다뤄보려 합니다. 이 중 간단한 용어지만 헷갈릴 수 있어 정의를 다시 옮겨오겠습니다.(Reference) Thre..
iOS) Swift에 대한 고찰 iOS 개발자라면 익숙한 Swift에 대해서 알아보려 합니다. Swift는 Apple WWDC 2014에서 공개된 언어입니다. 그전까지는 Objective-C가 애플의 표준 프로그래밍 언어였습니다. Objective-C와의 비교는 나중에 다른 글에서 다뤄보겠습니다. Swift는 safety, performance, design patterns를 고려한 상당히 높은 high-level 언어입니다. 여기서 high-level 언어는 인간 친화적인 언어, 기계어에서 높은 수준의 추상화된 언어를 의미합니다. 어셈블리처럼 레지스터, 메모리 주소, call stack등을 프로그래머가 직접 다루는 것이 아닌 변수, 배열, 객체, 함수 등으로 기계 언어를 추상화함으로써 효율적인 코드 작성이 가능해집니다. 앞서 상당히 ..