본문 바로가기

전체 글

(10)
iOS Dynamic Font sizes Orgarnizing and Graph StyleWeightSize(points)Leading(points) xSmallLarge TitleRegular3138Title 1Regular2531Title 2Regular1924Title 3Regular1722HeadlineSemibold1419BodyRegular1419CalloutRegular1318SubheadRegular1216FootnoteRegular1216Caption 1Regular1113Caption 2Regular1113 SmallLarge TitleRegular3239Title 1Regular2632Title 2Regular2025Title 3Regular1823HeadlineSemibold1520BodyRegular1520CalloutRegular1419SubheadRegul..
[Swift] 구조체 메모리 최적화 struct Machine { let id: Int let isRunning: Bool let needsRepair: Bool } 위와 같은 구조체가 있을 때, 이 구조체에 대한 바이트 크기를 구하려면 먼저 각 저장 프로퍼티의 크기를 알아야 한다. print(MemoryLayout.size) // 8 byte print(MemoryLayout.size) // 1 byte 따라서 위 구조체에 대한 바이트 크기를 출력하면 struct Machine { let id: Int // 8 byte let isRunning: Bool // 1 byte let needsRepair: Bool // 1 byte } print(MemoryLayout.size) // 10 byte print(MemoryLayout.stri..
프로젝트 아키텍처 변경 기록 목차 서론 기존 아키텍처 예상 목표 아키텍처 문제 발생 첫번째 해결책 두번째 해결책 세번째 해결책(해결!) 결론 서론 기존 App 의 기능을 이용하여 간단한 MacOS Application 을 만들 때 접하게 된 문제이다. 먼저 iOS Application 을 개발할 때는 필요한 기능들을 Domain 모듈(하나의 Target)에 구현했었다. MacOS App 에서 Domain 모듈의 기능들을 이용하기 위해 모듈을 Import 할 때, 기존에 여러 기능들을 하나의 Domain 모듈로 관리했기 때문에 필요없는 기능들과 그에 따른 의존성까지 포함하게 되었다. 이에 따라, 기존의 여러 기능들을 포함하고 있는 하나의 Domain 모듈을 쪼개기로 결심했다. 기존 아키텍처 먼저 기존 아키텍처에 대해서 짧게 설명하자면..
What is a Use Case? Use Case 의 정의 일반적으로 프로그래밍에서 말하는 Use Case 는 다음과 같이 정의될 수 있다. 사용자가 특정 시스템을 사용하는 방식을 정의한 것. 사용자가 특정 시스템을 사용하여 목적을 달성하기 위해 시스템이 제공해야 하는 기능의 단위. Use Case 의 특징 Use Case 를 작성할 때 일반적으로 지켜지는 여러 특징이 있다. Use Case 는 사용자의 관점에서 정의되어야 한다. (e.g. "로그인한 사용자는 게시판에 글을 등록할 수 있다." or "로그인한 사용자는 게시판에 글을 등록할 수 있어야 한다.") Use Case 는 "Actor" 와 "Action" 이 필요하다. (위의 예제에선 Actor: "로그인한 사용자", Action: "게시판에 글을 등록하다" or "글을 등록하다..
Class vs Struct 성능 비교 테스트 - 테스트에 사용된 Class 와 Struct 구현은 맨 밑에 있습니다. (+ 직접 테스트 해볼 수 있는 .swift 파일) - 실제 상황에서 측정한 것이 아니므로 정확한 측정이 될 수 없겠지만 최대한 변수 요소가 제한된 상황에서 테스트를 수행했다고 생각합니다. Allocation // - Simple ------------------------------------------------------------------------ // Average: 0.275 sec func test_measureAllocationPerformanceForSimpleClass() { measure { (1...REPEAT_COUNT).forEach { i in let ref = SimpleClass(id: i) } }..
[RealmSwift] Index 사용에 대한 성능 테스트 기록 RealmSwift 10.47.0 기준으로 작성된 글입니다. [READ] No indexing 총 Item 갯수 \ Query 실행 횟수 50,000 100,000 200,000 5,000 2.377 (초) 4.388 8.310 10,000 4.689 8.703 16.429 20,000 9.376 16.963 32.514 Yes Indexing 총 Item 갯수 \ Query 실행 횟수 50,000 100,000 200,000 5,000 0.436 0.440 0.435 10,000 0.874 0.873 0.906 20,000 1.749 1.755 1.773 [Write] No Indexing Query 실행 횟수 소요 시간 1,000 2.673 5,000 16.570 10,000 31.701 20,000..
RxSwift 구현에 대한 이해 기초 (1) - RxSwift 6.6.0 기준으로 작성된 글입니다. 해당 글은 RxSwift 의 사용법을 다루는 글이 아니라 구현에 대한 개인적인 이해를 돕기위해 작성된 글입니다. 목차: ObservableConvertibleType (Protocol) Observable (Class) ObservableType (Protocol) Observer (Protocol) AnyObserver (Struct) Event (Enum) EventConvertible (Protocol) Disposable (Protocol) Cancelable (Protocol) DisposeBase (Class) DisposeBag (Class) AtomicInt (Class) ObservableConvertibleType (Protocol..
[RxSwift] `UITextField.rx.text` 프로퍼티의 '예상치 못한 요소 방출' 이슈 문제: textField.rx.text.orEmpty.asDriver() .drive(with: self) { owner, text in print("text") } .disposed(by: disposeBag) 그림 1. `text` controlProperty 구독 예시 그림 1 처럼 `UITextField` 의 `text` controlProperty 를 구독한 상황에서 현재 화면이 dismiss 될때 구독 클로저가 한 번 더 실행되는 것 같은 현상이 발생. 해결과정: 문제의 구독과 연관 있는 다른 구독을 살펴보며 원인 파악 -> 아무리 봐도 문제가 없음(원인을 모르겠음) 여기저기 `debug()` operator 를 사용해가며 문제 원인 파악 -> 구독 문제가 아니라 `text` controlPr..