Blog

The ancestor of every action is a thought.

Modular Architecture on iOS App, Part 2

dependency & configuration

이번엔 지난 포스트에서 만들었던 프로젝트를 토대로 Dependency & Configuration이라는 주제로 다뤄볼 것이다. Different ways to share code between apps 모듈(프레임워크)을 프로젝트의 타겟에 포함해서 나눌 수도 있지만, 각각의 프로젝트로 생성해야 했던 이유는 동일한 코드베이스의 두 앱이 있기...

Modular Architecture on iOS App, Part 1

what's up dooray!

Modular Architecture Preface 입사 후 가장 좋은 점은 큰 규모의 앱을 많이 접해볼 수 있다는 것이다. 그중에서도 Dooray! 서비스는 가장 애착이 가고 많이 참여했던 프로젝트이기도 하다. 두레이 서비스에 애착이 가는 건 훌륭한 서비스라서 인 것도 있지만, 최대 관심사인 아키텍처, 클린 코드에 대한 고민을 많이 하게 해준 서...

Error Handling in RxSwift

복잡한 네트워크 에러 처리 요구사항 만족시키기

Rx에서 가장 다루기 힘든 녀석이 에러가 아닐까 생각합니다. 어느 상황에서는 스트림이 깨지지 않고 유지되어야 할 테고, 어느 상황에는 스트림을 종료해야 하는데 처음 Rx를 접하면 쉽지 않은 작업입니다. 에러를 다루는 기본적인 예시부터 복잡한 에러 처리 예시까지 살펴보면서 천천히 알아보겠습니다. 에러 핸들링 Rx에서 에러를 다루는 방법은 크게 ...

[iOS] How to invalidate Timer properly?

Weak reference timer to prevent memory leaks

앱을 만들다 보면 Timer를 종종 사용하게 되는데요, 일정 시간 뒤에 특정 콜백을 실행하거나 주기적으로 이벤트를 발생시키기에 아주 편리한 방법이죠. 하지만 별 생각 없이 사용했다간 타이머에 의해서 메모리 릭이 발생한다는 걸 뒤늦게 알게 될 수도 있습니다. (저처럼요.. 😹) Timer를 생성할 때 반복옵션을 사용하지 않으면 지정한 시간 뒤에 콜백이...

[Swift] Property Wrappers

@State, @Binding, @Trimmed, @CaseInsensitive, etc

Swift Property Wrappers 원문 : Swift Property Wrappers 이전에 Objective-C의 특성에서 언급했던 “at sign”(@)의 존재가, 스위프트가 나오고 조금씩 의문이 풀려가고 있다고 생각했습니다. 처음엔 @ 함수는 Objective-C 영역으로 제한되어 있었습니다(@IBAction, @NSCopying, ...

[Android] Functional Programming for Android Developers

안드로이드 개발자를 위한 함수형 프로그래밍 Part 1~2

Functional Programming for Android Developers — Part 1 Functional Programming for Android Developers — Part 2 해당 글을 번역 및 일부 수정한 글 입니다. Functional Programming for Android Developers 이 시리즈에서는...

[Android] XML naming convention

xml 컨벤션 가이드

A successful xml naming convention 해당 글을 번역 및 일부 수정한 글 입니다. A successful XML naming convention 안드로이드 프로젝트를 진행하다보면 빌드 환경, CI, 코딩 컨벤션 등 여러 가지 전략을 가지고 있지만 리소스에 대한 naming 규칙은 가지지 않은 경우가 많습니다. 특히나, XM...

[iOS] CocoaPods을 이용한 의존성 관리

Cocoa 프로젝트에서 의존성 관리를 위한 CocoaPods라는 오픈소스가 있다. 오픈소스가 만들어진지 햇수로 8년이 되었고 여전히 왕성하게 진행되고 있다.(ruby로 짜여졌다) 현재 약 43,000개 정도의 라이브러리가 Cocoapods을 통해서 제공되고 있다. Cocoapods Install Mac은 기본으로 Ruby가 설치되어 있어서 명령어...

[Swift] filter, reduce, map

in sequence protocol

filter 조건에 만족하는 시퀀스 원소들만 추려서 배열로 반환한다. Declaration func filter(_ isIncluded: (Int) throws -> Bool) rethrows -> [Int] 클로저는 각 원소가 조건을 만족하는지 검사하여 Bool값을 반환한다. func isEven(value: Int) -> Bo...

[Swift] DispatchSemaphore

세마포어는 멀티프로그래밍 환경에서 자주 언급되는 중요한 개념이다. 특히 멀티쓰레드에서는 자원의 동기화, 동시성 제어를 위해 꼭 필요하다. 세마포어에서는 P함수 와 V함수 를 가진다. P함수 는 흔히 semWait, V함수 는 semSignal 라고 한다. Swift에서 제공하는 DispatchSemaphore에서도 동일한 이름의 메소드를 가진다. ...