iOS

MVCMVC 패턴은 Model-View-Controller의 구조를 가지는 디자인 패턴으로, UIKit 프레임워크에서 자주 사용되는 디자인 패턴입니다. UIKit 프레임워크는 MVC 패턴을 기반으로 구성되어 있습니다.Model-View-Controller는 각자 다른 역할들을 가지고 있습니다.Model앱에서 사용되는 데이터와 비즈니스 로직을 담당합니다.UI와 독립적으로 이루어져 있으며, 데이터 저장 및 가공, 네트워크 요청 처리 등을 수행합니다.값이 변경되는 데이터를 Model이 가지고 있는 경우에는 Notification과 KVO 등을 통해 Controller에 변경 사항을 전달합니다.View사용자에게 화면을 표시하는 역할을 담당합니다.버튼, 레이블, 이미지 등의 **UI 요소들(UIView, UIBu..
· iOS/UIKit
여러 데이터를 표현하기 위해선 다양한 방법으로 구현할 수 있습니다. 그 중에서 반복적인 형식의 데이터를 표현하는 방법 또한 여러 가지인데, 대표적으로 UICollectionView, UIPageViewController, UIScrollView가 있습니다. 각 뷰가 어떻게 동작하는지와 메모리의 관점에서 어떠한 특징을 보이고 있는지 학습하였고, 이를 기반으로 상황에 따라 어떠한 뷰를 사용할 지 정의하고자 합니다. UICollectionView동작 방식UICollectionViewCell을 기반으로 데이터를 리스트 또는 그리드 형태로 표시합니다.재사용 큐를 사용하며, 보이지 않는 셀은 메모리에서 로드 또는 제거되지 않고, 재사용됩니다.메모리 관점셀을 재사용하기 때문에 효율적입니다. UIPageViewCont..
· iOS/UIKit
FinaliOS 개발을 하다보면 Final 키워드를 붙여 클래스를 정의하는 경우를 볼 수 있습니다.final class NetworkManager { static let shared = NetworkManager() private init() {} ... }따라서 Final 키워드의 특징은 무엇인지, 어떠한 경우에 사용해야 할 지에 대해 학습하였습니다. 문법적 특징Final 키워드를 선언하게 되면 상속이 불가능해집니다. 만약 Final 키워드가 선언된 것을 상속하려고 하면 컴파일 에러가 발생합니다.Final 키워드를 사용하면 메서드, 프로퍼티, 서브스크립트의 오버라이드가 불가능해진다는 특징을 지닙니다. 만약 final 키워드가 선언된 곳에서 오버라이드를 진행하려고 하면 컴파일 에러가 발생합..
· iOS
Xcode의 빌드 과정GCC를 통해 C언어를 빌드 하듯, Swift 언어는 Xcode를 통해 빌드가 됩니다. 따라서 이번에는 Xcode의 빌드 과정에 대해 학습해보았습니다. Swift는 C언어 기반이기 때문에 컴파일 과정이 매우 비슷합니다.  전처리기 (Preprocessing)전처리기는 소스 코드를 컴파일러가 읽을 수 있는 형식으로 전환해줍니다. Swift에는 전처리기가 없기 때문에 매크로 등을 정의할 수 없습니다. 하지만 전처리문을 부분적으로라도 사용할 수 있도록 [Build Settings] → ‘Active Compilation Coditions’를 제공해줍니다. Swift에서는 release와 debug를 구분하거나, OS를 구분할 때에 전처리문을 사용합니다.#if DEBUGprint("디버그"..
· iOS/UIKit
navigationItem.title과 관련하여 신기한 점을 발견하였습니다.// 1번navigationItem.title = "안녕하세요"// 2번navigationItem.title = "\(getNicknameFromUserDefaults() ?? "대장")님의 다마고치"// 3번let title = "\(getNicknameFromUserDefaults() ?? "대장")님의 다마고치"navigationItem.title = title1번과 같이 문자열 보간법이 없이 정의하면 해당 title이 backBarButtonItem이 나타나는데, 2,3번과 같이 문자열 보간법으로 title을 지정하면 ‘Back’버튼이 나오는 현상을 발견하였습니다.  navigationItem.backBarButtonIte..
· iOS
개발을 진행하면서 (개인적으로) 매우 흥미로운 것을 발견하였습니다. @IBAction func textFieldTExtChanged(_ sender: UITextField) { print("sender -> ", sender.text) // 만약 숫자만 포함 if isNumber(sender.text) { // Q. 왜 옵셔널인데 sender.text만 해도 옵셔널이 해제되는거지? // 문자열 보간법으로 작성하면 Optional로 나타남!! resultLabel.text = "\\(sender.text)" // 하지만 text에 바로 할당하면..
· iOS/UIKit
스토리보드를 학습하는 과정에서 스토리보드는 어떻게 실행되는 것인지에 대해 학습해보고자 합니다. 스토리보드에 대해 알기 위해선 XIB와 NIB에 대한 이해가 필요합니다. XIB란 Xcode Interface Builder의 약자로, 화면을 구성할 때 사용되는 XML 형식의 파일입니다. XML 파일이기 때문에 바이너리보단 사람이 이해하기 쉽고, 수정된 부분을 확인할 수 있어 소스코드로 관리할 수 있습니다. 직접 수정을 하기 위해선 XML 문법에 맞춰서 수정해야 하지만, Xcode에서 Interface Builder(스토리보드)를 제공하여 GUI 형태로 수정할 수 있도록 해줍니다. NIB는 Nextstep Interface Builder의 약자로, 화면을 구성하는 클래스들을 바이너리 형태의 압축 파일로 저장하..
· iOS/UIKit
이번 글은 UIKit 프레임워크를 스토리보드를 사용하지 않는 코드 기반으로 세팅하는 방법에 대해 알아보겠습니다. 스토리보드와 코드 베이스에는 장단점이 존재합니다. 우선 스토리보드의 장점은 어노테이션이나 컴포넌트와 관련된 코드를 줄일 수 있어 로직에 더욱 집중할 수 있습니다. 뷰가 복잡해질 수록 관리할 코드가 줄어들기 때문에 관리하게 편해집니다. 또한 오토 레이아웃을 시각적으로 보여주어 오류를 쉽게 파악할 수 있습니다. 단점은 스토리보드는 xml 기반이기 때문에 다른 개발자가 확인하기에 어렵다는 문제점이 있습니다. 스토리보드를 수정하고 PR를 요청했을 때, 다른 개발자가 코드만을 보고 변화를 확인하기 어렵다는 단점이 있습니다. 또한 뷰에 컴포넌트가 추가되어 복잡해질수록 파일이 무거워진다는 단점도 있습니다...