Noah's curiosity

Swift, iOS 관련 기술과 개발 경험기를 공유하고 있습니다.

Clean-Swift, 무엇을 테스트 해야하는가
Swift Featured

Clean-Swift, 무엇을 테스트 해야하는가

현재 진행 중인 프로젝트에서는 Clean-Swift 를 이용해 화면 단위를 개발하고 있는데요, Clean-Swift(VIP Pattern) 컴포넌트에 대한 단위 테스트를 작성하기 위해 어떤 부분을 고민했는지 공유해보려고 합니다. Clean-Swift 에서는 Scene에 대한 단위 테스트를 작성할 때 크게 3가지의 단위 테스트를 통해 구현을 검증하도록 가이드합니다. 1. ViewController => Interactor 호출 테스트 2. Interactor => Presenter 호출
8 min read
비동기 작업 캐시 하기
iOS Featured

비동기 작업 캐시 하기

들어가며 안녕하세요 Noah입니다. SOPT라는 동아리에서 대학생들이 모여 만들게 된 앱이 공개된지 얼마되지 않았음에도 불구하고 감사하게도 많은 회원 수를 유치하게 되었습니다. 서비스 소개 페이지 : https://havit.app/ 또 그만큼 돈으로 살 수 없는 소중한 피드백과, 사용자의 사용경험을 들어볼 수 있었는데요, 오늘은 사용자의 사용 경험을 높이기 위해 했던 경험 한 가지를 공유하고자
17 min read
영화 <퍼펙트 데이즈(2024) 中>

겹침의 아름다움

“그림자가 겹치면 더 어두워질까요?” 시한부 판정을 받은 한 사내가 주인공 히로야마에게 던진 질문이다. 히로야마는 대답한다. 아무것도 변하지 않는다면 말이 안 된다고. 매일 집 앞에서 한 할머니의 비 쓰는 소리에 잠에서 깨고, 양치를 하고, 화분에 물을 주고, 파란색 작업복을 입고, 똑같은 자판기 캔 커피를 먹으며 출근하는 주인공 히로야마. 매일 챙겨가야 할
4 min read
확신이 없다면 Checked Continuation을!
Swift

확신이 없다면 Checked Continuation을!

URL의 미리보기 이미지(대표 이미지)를 Apple의 Link Presentation 프레임워크를 이용해 불러오도록 개발하며 특정 링크의 경우 아래와 같이 continuation misuse로 인한 leak이 발생하는 것을 확인하여 주의할 점에 대해 기록 삼아 남겨본다. 무엇이 문제였는지, 작성한 코드를 확인해 보자 Before func requestPreviewImage() async throws -> UIImage { let primaryImageProvider = self.linkMetadata?.imageProvider ?? self.
3 min read
Swift Concurrency 이전의 동시성 프로그래밍
Swift

Swift Concurrency 이전의 동시성 프로그래밍

들어가며 안녕하세요! 오늘은 Swift Concurrency가 등장하기 이전에는 동시성 프로그래밍을 구현하기 위해 어떠한 도구들을 사용했는지, 어떠한 맥락으로 동시성 프로그래밍을 도와주는 도구들이 등장하게 되었는지 더 나아가 Swift Concurrency는 어떠한 문제를 해결하기 위해 등장하게 되었는지 살펴보도록 하겠습니다. Thread 동시성 프로그래밍을 할 때 '스레드'라는 단어가 많이 언급되는데요, 스레드를 많이 쓰면 쓸수록 더 많은 작업을
17 min read
동시성과 병렬성의 차이
Computer-Science

동시성과 병렬성의 차이

들어가며 이번 주제에서는 Swift Concurrency에 대해 자세히 알아보기에 앞서 동시성과 병렬성에 대한 개념을 잡아보려고 해요 코드를 다른 코드와 동시에 실행한다는 것은 무엇을 의미하는 걸까요? Computer Science에서 ‘동시’라는 단어의 의미는 2개 이상의 사건이 정확히 같은 시간에 진행되는 것을 의미하는 “same-time”을 의미하는걸까요? 그럼 시작해보시죠! 우리가 작성하는 대부분의 코드는 동시성이 없는,
4 min read
Bundle에 관하여
iOS

Bundle에 관하여

들어가며 안녕하세요 Noah입니다. Bundle Class는 Bundle directory를 추상화해 내부 구조를 몰라도 편하게 접근할 수 있도록 해주는데요, 오늘은 이 번들 디렉터리의 구조와 개념, Bundle class의 사용법에 대해 예제와 문서를 보며 함께 알아보도록 하겠습니다. Bundle Apple Developer Documentation에서는 Bundle Class를 아래와 같이 소개하고 있어요 A representation of the code and resources stored
20 min read
Thank you Jonathan Rasmusson!!

Thank you Jonathan Rasmusson!!

WWDC 2016 UnderStanding Swift Performance을 보고 동료들과 스터디를 한 뒤에 잘못 이해하고 있던 부분(부끄럽지만 Value Type은 무조건 Stack에만 할당되는 것으로 알고 있었습니다.)을 바로 잡기 위해 메모리 맵을 확인해보며 Value Type이 무조건 Stack에만 할당되는 것이 아님을 저번 포스트를 통해 조사해보았습니다. 지난번 포스트 : Value Type은 무조건 Stack에만 할당될까? 조사하며 알게
2 min read
Git의 commit id는 어떻게 생성될까?
Computer-Science

Git의 commit id는 어떻게 생성될까?

여러분 안녕하세요! Noah입니다. 혹시 Git을 사용하면서 commit id를 보신 적이 있나요? 우리는 commit id로 특정 버전을 가리켜 commit을 되돌리기도 하고, 특정 commit의 변경사항을 되돌리기도 합니다. 그렇다면 이 commit id는 어떻게 해서 만들어지는 걸까요? Q. 서버에서 고유한 id를 부여해주나요..?🧐 A. Git은 로컬에서 관리되는 버전 관리시스템이기 때문에 별도의 인터넷이 연결되지 않은 환경에서도
6 min read
TCP와 UDP에 관하여
Computer-Science

TCP와 UDP에 관하여

OSI7 Layer Model 안녕하세요 :) Noah입니다. 오늘은 TCP와 UDP의 통신방식에 관한 얘기를 나눠볼까 합니다. 인간사회에 여러 가지 규칙이나 규약이 있듯, 컴퓨터 네트워크 분야에도 여러 가지 규약이 있습니다. 이러한 규약을 정하는 기관 중 국제표준화기구(ISO)에서 통신이 일어나는 과정을 단계별로 쉽게 파악하고, 다른 시스템 간의 원활한 통신을 위해 제안한 통신규약인 OSI 7
9 min read
Apple의 과거 Process memory 관리 모델을 알아보자
Apple

Apple의 과거 Process memory 관리 모델을 알아보자

운영체제가 프로세스별로 메모리를 관리하는 방식을 이해하기 위한 학습의 일환으로 Apple의 과거 Macintosh Operating System의 메모리 관리 모델을 현대 프로세스 메모리 관리 모델과 비교해가며, stack, heap, text, 글로벌 변수 GVAR, BSS의 역할에 대해 정리해보자. Inside Macintosh: Memory Classic Mac OS memory management 먼저 오늘 살펴보려고 하는 Apple의 Macintosh System 7.0이다.
18 min read
Observer Pattern
Design-Pattern

Observer Pattern

안녕하세요 Noah입니다 :) 오늘은 Gang of Four 소프트웨어 디자인 패턴 중 행위 패턴에 속하는 Observer Pattern 에 대해서 알아보도록 하겠습니다. iOS에서 Observer Pattern은 Foundation framework의 NotificationCenter, KVO(Key Value Observing), Property Observer, Combine framework의 Publisher, Subscriber 등에서 쓰이는데요, Combine framework의 Publisher(Observable), Subscriber(Observer)과 Notification Center는 Observer Pattern과 비슷하지만 약간의
12 min read
Value Type은 무조건 Stack에만 할당될까?
Swift

Value Type은 무조건 Stack에만 할당될까?

* WWDC 2016 UnderStanding Swift Performance 세션을 보고 잘못 이해하고 있던 부분을 바로 잡기위해 실험을 통해 다시 풀어보았습니다. 위 세션을 아래의 포스트를 통해 정리해보았습니다. 관심있는 분들은 아래의 링크를 참조해주세요! Swift 성능 이해하기 struct-class 또한 Value Type이 정말 Stack에만 할당되는지, Heap에 할당되는지 확인해보고 싶어 여러도구를 활용해 Swift코해당 인스턴스가 어디에 할당되는지 분석해보며 확인해보려
8 min read
Advances in UI Data Sources
iOS

Advances in UI Data Sources

들어가며 Advances in UI Data Sources WWDC 세션을 보며 diffable datasource에 대해 알아보도록 하겠습니다 :) Current State-of-the-Art 기존에는 UITableView 및 UICollectionView 에서 UI data source와 어떻게 상호작용했을까? UICollectionViewDataSource 구현 예를 보자 위 코드에서는 UICollectionViewDatasource 프로토콜에서 필수(required)로 구현해야하는 두 가지 메서드와 다른 하나의 메서드(optional)가 구현되어있다. 프레임워크는 아래의 두
25 min read
Archive 문서로 알아보는 Collection View Basics
iOS

Archive 문서로 알아보는 Collection View Basics

들어가며 기본에 대해 확실히 짚고 넘어가기 위해 Archive된 문서인 Collection View Basics를 보고, 과거로 돌아가 Collection View의 concept을 이해해보자 Collection View Collection View는 contents를 화면에 표시하기 위해 다양한 객체와 협력한다. 이 중 일부 객체는 custom 객체이기 때문에 이를 작성해 프레임워크에 알려야한다. 예를 들어 Collection View에 표시할 item 수를 알려주는 data
16 min read
[weak self] 무조건 사용하는게 맞는걸까? 🤔
Swift

[weak self] 무조건 사용하는게 맞는걸까? 🤔

클로져에서 self를 캡쳐할 때 [weak self] 를 사용하는 경우는 순환 참조를 방지하기 위해 약한 참조로 클로져 내부에서 해당 클래스의 인스턴스를 사용할때 입니다. 클로져에서 약한 참조를 이용해 특정 인스턴스를 캡쳐하지 않으면 (여기서는 self를 캡쳐한다고 가정) self가 해제될 때까지 기다리고 self는 클로져가 해제될 때까지 기다리는 strong reference cycle 상황을 만들어 내게 됩니다.
18 min read
공식문서로 알아보는 Window, Scene
iOS

공식문서로 알아보는 Window, Scene

iOS application에서 화면을 나타내는데 중요한 역할을 하는 window와 scene에 대해 알아봅시다. scene을 알아보기에 앞서 먼저 window부터 알아보자 window는 애플리케이션 user interface의 전반적인 presentation을 처리한다. window는 view(및 자체 view controller)와 함께 작동하며 사용자에게 표시되는 view 계층 구조와의 interaction 및 변경사항을 관리한다. window object는 app의 콘텐츠를 담는 역할을 하며, screen은
13 min read
Managing Your App’s Information Property List
Xcode

Managing Your App’s Information Property List

실행 파일을 나타내는 모든 번들에는 번들을 설명하는 Information Property List 파일(Info.plist) 이 포함되어야 한다. property list에 포함할 항목에 대한 세부 사항은 실행 파일 유형과 플랫폼에 따라 다르다. 일반적으로 특정 번들에 대한 Information Property List 파일을 생성하는 데 도움이 되는 Xcode를 사용하는 것을 Apple에서 가이드하고 있다. 번들은 특정한 규칙대로
6 min read
Customizing the UIKit status bar style
iOS

Customizing the UIKit status bar style

애플리케이션의 user interface와 잘 어울리는 status bar의 style을 설정해보자 당연하게도 Status bar의 콘텐츠는 사용자가 읽을 수 있거나(readable) 볼 수 있어야(visible) 사용자 경험이 좋을 것이다. 예를 들면 위와 같이 Status bar를 구성하는 것보다 위 처럼 Status bar의 style을 구성해야한다는 것이다. app level(앱 수준)또는 ViewController level(뷰 컨트롤러
4 min read
공식문서로 알아보는 Group/Folder
Xcode

공식문서로 알아보는 Group/Folder

Xcode에서 파일혹은 폴더를 프로젝트에 추가할 때 위와 같은 옵션을 선택할 수 있도록 가이드 한다. 각각의 설정이 무엇을 의미하는지 알아보자. 💡Copy items if needed Project navigator에 추가하기 전에 모든 파일과 폴더를 프로젝트 폴더에 복사한다. 원본 버전 대신 파일의 copy로 작업하려면 해당 옵션을 사용한다.💡Create groups 선택한 필드 및 디스크의 folder 구조와
3 min read
공식문서로 알아보는 Array - 배열
Swift

공식문서로 알아보는 Array - 배열

안녕하세요 Noah입니다 :) 오늘은 Swift의 자료구조 중 배열에 대해 알아보도록 하겠습니다😀 배열은 메모리 영역에 연속되어있는 데이터 구조로 논리적인 순서와 물리적인 순서가 같다는 특징을 가지고 있습니다. 배열은 특정 요소의 조회가 아주 빠르다는 특징을 가지고 있습니다. 특정 요소를 조회할 때 순회(traversing)하는 것이 아니라, 배열의 특징중 하나인 논리적인 순서(index)와 물리적인
15 min read
Swift 성능 이해하기 struct-class
Swift

Swift 성능 이해하기 struct-class

안녕하세요 Noah입니다 :) 좋은 개발자는 좋은 코드를 짜야 할 것입니다. 제가 생각하는 좋은 코드란, 팀원들이 보기에 좋은 코드를 작성하고, 안정적이고 속도가 빠른 코드를 작성해 결과적으로 앱을 사용하는 사용자에게 좋은 경험을 안겨주는 것이 좋은 코드라고 생각합니다. 이번 시간에는 좋은 코드를 작성하기 위한 초석으로 Swift 성능 이해하기라는 제목으로 알아봅시다!! 이번 편에서는 struct와 class에
39 min read
iOS 어플리케이션의 EntryPoint
iOS

iOS 어플리케이션의 EntryPoint

안녕하세요 Noah입니다 :) 오늘은 iOS 어플리케이션의 진입점(Entry Point) 에 대해 알아보며, 기본적인 앱의 구조에 대해 살펴보도록 하겠습니다😃 Entry Point (진입점) 프로그램 실행은 프로그래밍 언어나 운영체제 등에 의해 정의된 관용명을 통한, 지정된 이름으로 시작될 수 있다. 많은 언어에서(특히 C) 이 지정된 이름은 main이라고 불리는 함수이다. 결과적으로 엔트리 포인트는 main 함수라고
14 min read