배경숫자 계산에서 가장 중요한 건 "정확성"입니다.특히 금융, 결제, 세금, 환율 계산처럼 단 1원의 오차도 허용되지 않는 분야에서는 Double과 같은 부동 소수점 타입이 적합하지 않습니다.Swift에서 흔히 사용되는 숫자 타입에는 Double, Decimal, Int64가 있으며, 각각의 특성과 성능, 정확성은 크게 다릅니다.이 글에서는 왜 Decimal을 써야 하는지를 Double, Int64와 비교하며 설명하고자 합니다. Double의 문제점Swift에서 가장 많이 사용되는 실수형 타입은 Double입니다.Double은 64비트 이진 부동 소수점 방식(IEEE 754 표준)을 따르며, 넓은 범위의 수를 표현할 수 있고 연산 속도도 빠릅니다.하지만 정확한 소수값을 표현해야 하는 상황, 예를 들어 금..
모듈모듈이란 소프트웨어의 논리적 그룹화 단위로, 시스템을 기능 단위로 묶은 요소입니다. 또한 모듈은 컴파일 단위이자 배포 단위로, 여러 가지 형태를 가지고 있습니다. System Moduleimport Foundation // Foundation 모듈import UIKit // UIKit 모듈import CoreData // CoreData 모듈 App Module앱 자체도 하나의 모듈입니다. 기본적으론느 앱의 Bundle Identifier가 모듈명으로, 별도의 import 없이 앱 내에서 사용 가능합니다. Framework Moduleimport Alamofire // 외부 프레임워크 모듈import MyFramework // 커스텀 프레임워크 모듈 Package Module..
MVVM 패턴을 도입하게 된 이유와 구조적 이점iOS 개발을 하다 보면, UIViewController 파일이 점점 커지고 복잡해지는 상황을 자주 마주하게 됩니다.기능이 늘어나면서 화면 구성, 사용자 입력 처리, 네트워크 통신, 데이터 가공 등 여러 역할을 한 클래스에서 수행하게 되는데, 이로 인해 코드의 가독성과 유지보수성이 급격히 떨어지게 됩니다.이러한 문제를 해결하기 위해 등장한 것이 바로 MVVM(Model - View - ViewModel) 패턴입니다.이번 글에서는 MVVM 패턴의 구성 요소와 각각의 역할, 그리고 실제 예제를 통해 어떻게 ViewController의 책임을 줄이고 관심사를 분리할 수 있는지를 정리해보고자 합니다. MVVM의 구성 요소MVVM은 그 이름처럼 Model, View,..
MVCMVC 패턴은 Model-View-Controller의 구조를 가지는 디자인 패턴으로, UIKit 프레임워크에서 자주 사용되는 디자인 패턴입니다. UIKit 프레임워크는 MVC 패턴을 기반으로 구성되어 있습니다.Model-View-Controller는 각자 다른 역할들을 가지고 있습니다.Model앱에서 사용되는 데이터와 비즈니스 로직을 담당합니다.UI와 독립적으로 이루어져 있으며, 데이터 저장 및 가공, 네트워크 요청 처리 등을 수행합니다.값이 변경되는 데이터를 Model이 가지고 있는 경우에는 Notification과 KVO 등을 통해 Controller에 변경 사항을 전달합니다.View사용자에게 화면을 표시하는 역할을 담당합니다.버튼, 레이블, 이미지 등의 **UI 요소들(UIView, UIBu..
여러 데이터를 표현하기 위해선 다양한 방법으로 구현할 수 있습니다. 그 중에서 반복적인 형식의 데이터를 표현하는 방법 또한 여러 가지인데, 대표적으로 UICollectionView, UIPageViewController, UIScrollView가 있습니다. 각 뷰가 어떻게 동작하는지와 메모리의 관점에서 어떠한 특징을 보이고 있는지 학습하였고, 이를 기반으로 상황에 따라 어떠한 뷰를 사용할 지 정의하고자 합니다. UICollectionView동작 방식UICollectionViewCell을 기반으로 데이터를 리스트 또는 그리드 형태로 표시합니다.재사용 큐를 사용하며, 보이지 않는 셀은 메모리에서 로드 또는 제거되지 않고, 재사용됩니다.메모리 관점셀을 재사용하기 때문에 효율적입니다. UIPageViewCont..
FinaliOS 개발을 하다보면 Final 키워드를 붙여 클래스를 정의하는 경우를 볼 수 있습니다.final class NetworkManager { static let shared = NetworkManager() private init() {} ... }따라서 Final 키워드의 특징은 무엇인지, 어떠한 경우에 사용해야 할 지에 대해 학습하였습니다. 문법적 특징Final 키워드를 선언하게 되면 상속이 불가능해집니다. 만약 Final 키워드가 선언된 것을 상속하려고 하면 컴파일 에러가 발생합니다.Final 키워드를 사용하면 메서드, 프로퍼티, 서브스크립트의 오버라이드가 불가능해진다는 특징을 지닙니다. 만약 final 키워드가 선언된 곳에서 오버라이드를 진행하려고 하면 컴파일 에러가 발생합..
Xcode의 빌드 과정GCC를 통해 C언어를 빌드 하듯, Swift 언어는 Xcode를 통해 빌드가 됩니다. 따라서 이번에는 Xcode의 빌드 과정에 대해 학습해보았습니다. Swift는 C언어 기반이기 때문에 컴파일 과정이 매우 비슷합니다. 전처리기 (Preprocessing)전처리기는 소스 코드를 컴파일러가 읽을 수 있는 형식으로 전환해줍니다. Swift에는 전처리기가 없기 때문에 매크로 등을 정의할 수 없습니다. 하지만 전처리문을 부분적으로라도 사용할 수 있도록 [Build Settings] → ‘Active Compilation Coditions’를 제공해줍니다. Swift에서는 release와 debug를 구분하거나, OS를 구분할 때에 전처리문을 사용합니다.#if DEBUGprint("디버그"..
navigationItem.title과 관련하여 신기한 점을 발견하였습니다.// 1번navigationItem.title = "안녕하세요"// 2번navigationItem.title = "\(getNicknameFromUserDefaults() ?? "대장")님의 다마고치"// 3번let title = "\(getNicknameFromUserDefaults() ?? "대장")님의 다마고치"navigationItem.title = title1번과 같이 문자열 보간법이 없이 정의하면 해당 title이 backBarButtonItem이 나타나는데, 2,3번과 같이 문자열 보간법으로 title을 지정하면 ‘Back’버튼이 나오는 현상을 발견하였습니다. navigationItem.backBarButtonIte..