전체 글 10

[UIKit] UINavigationBar

Overview Navigation Bar는 화면의 꼭대기에 표시되며 화면의 탐색(Navigation)을 표현하는 객체이다. 주로 아래와 같이 Left Button, Title, Right Button으로 구성된다. Navigation Bar는 단일 객체로 사용하거나, Navigation Controller와 함께 사용한다. UINavigationBarAppearance Navigation Bar의 외형을 수정하는 객체이며 UIBarAppearance의 SubClass이다. UINavigationBar 내의 item들의 외형을 변경하거나 Navigation Bar의 배경, 그림자 등을 설정한다. NavigationBar의 UINavigationBarAppearance 프로퍼티는 아래와 같이 세가지가 존재..

IOS/UIKit 2021.10.24

[UIKit] UINavigation Controller

Overview Navigation Controller는 하나 이상의 View Controller를 관리하는 View Controller의 Container 객체이다. Navigation Controller는 Child View Controller들을 Navigation Stack을 사용해 관리한다. Navigation Controller의 첫 화면인 Root View Controller는 Stack의 최 하단에 위치한다. 새로운 View Controller를 Stack에 Push 할 경우 화면에 나타나며 이전의 View Controller는 그 아래에 숨겨진다. Back 버튼을 누르면 Stack의 최 상단의 View Controller가 POP 되며 아래 있던 View Controller가 나타난다. ..

IOS/UIKit 2021.10.23

[UIKit] App's Life Cycle

App State App의 State에는 크게 두 가지가 있다. Foreground State App은 사용자의 주목을 받으며 많은 시스템 리소스를 차지한다. Background State App은 화면에 나타나지 않으며 최소한의 일을 한다. App은 State가 변화함에 따라 그에 맞는 동작을 해야 한다. UIKit은 App의 State가 변화할 때 Delegate 객체의 함수를 호출하여 State의 변화를 알린다. Scene-Based App Scene-Based의 App은 IOS 13 이후에서 지원된다. App에서 Scene Support를 Enable 할 경우 App은 Life Cycle Event에 반응하기 위해 UISceneDelegate 객체를 사용한다. Scene은 Device에서 동작하는..

IOS/UIKit 2021.10.13

[UIKit] UIApplication

UIApplication @MainActor class UIApplication : UIResponder IOS에서 실행하는 App을 Control하는 객체이다. 모든 IOS앱은 오직 하나의 UIApplication(혹은 UIApplication의 SubClass)의 객체를 가진다. 앱이 실행될때 System이 UIApplicationMain 함수를 호출하고 UIApplicationMain 함수는 UIApplication Class내의 shared라는 class 변수를 사용해 UIApplication 객체를 만든다. open class var shared: UIApplication { get } # 참고 # UIApplicataion은 싱글턴 패턴 방식을 이용해 shared를 통해 객체를 접근하지만 생성..

IOS/UIKit 2021.10.08

[Swift] Main Attribute

Entry Point 포스팅을 통해 설명했듯이 @main, @UIApplicationMain 등의 Attribute를 통해 Entry Point를 지정할 수 있다. 이 포스팅은 각 Attribute가 어떻게 Entry Point를 지정하는지에 대해 설명한다. @UIApplicationMain Xcode에서 App 프로젝트를 생성하면 자동으로 생성되는 AppDelegate 파일에서 아래와 같은 코드를 확인할 수 있다. @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { ... 생략 ... 공식 문서를 통해 @UIApplicationMain Attribute에 대해 알아보자. Using this attribute is equi..

IOS/Swift 2021.10.08

[Swift] Top-Level Code란?

Top-Level 정의 Apple의 공식 문서에 따르면 Top-Level의 정의는 다음과 같다. Any executable statement not written within a function body, within a class, or otherwise encapsulated is considered top-level. 해석하면 함수, 클래스 또는 다른 무언가로 감싸지지 않은 모든 구문은 Top-Level로 간주된다. Top-Level에서 선언된 모든 것들은 같은 모듈 내에서 자유롭게 접근이 가능하며 접근 제어 문법을 통해 이를 제한할 수 있다. Top-Level Code Top-Level Code에는 선언문(Top-Level Declarations)과 실행 구문(Excutable Top-Level ..

IOS/Swift 2021.10.07

[Swift] Entry Point란?

Entry Point란? Entry Point는 말 그대로 '진입점'이라는 의미로 프로그램이 시작하는 지점이다. 모든 프로그램에는 Entry Point가 존재한다. CPU가 Entry Point를 통해 해당 프로그램을 시작하기 때문이다. OS 환경에서 응용프로그램을 실행하면 Dispatcher는 해당 프로그램을 CPU에 적재한다. 그러면 CPU의 PC(Program Counter)는 응용프로그램을 실행하기 위한 특정 주소로 Branch 해야 한다. 이때 PC(Program Counter)는 어떤 값을 가져야 할까? 바로, 응용프로그램의 시작 주소를 가리켜야 한다. 즉, 응용프로그램이 시작될 때 PC(Program Counter)는 Entry Point의 주소로 Branch 한다. Script언어나 간단한..

IOS/Swift 2021.10.05

단일 책임 원칙 ( SRP : Single Responsibility Principle )

단일 책임 원칙의 정의 단일 책임 원칙은 '하나의 모듈은 하나의 일만 해야 한다'는 의미로 자주 오해되곤 한다. 이는 흔히 알려진 '하나의 함수는 하나의 일만 해야 한다'는 원칙과의 혼용되어 발생한 문제이다. 위의 원칙은 함수를 설계할 때 사용되는 원칙으로 단일 책임 원칙보다 저수준에서 사용된다. 단일 책임 원칙의 진짜 정의는 아래와 같다. 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다. 그렇다면 모듈을 변경하는 이유는 무엇일까? 그것은 바로 사용자가 이 모듈에 기대하는 책임이 변화할 때이다. 만약 사용자가 둘 이상이라 가정하면 모듈이 변화하는 이유는 두 가지 이상이 될 수 있다. A 사용자가 이 모듈에 기대하는 책임이 변화한 경우 B 사용자가 이 모듈에 기대하는 책임이 변화한 경우 즉, 위와..

Architecture와 Programming Paradigm

현재 Programming 패러다임에는 크게 세 가지가 있다. Procedure Programming, Object-Oriented Programming, Functional Programming 이 세 개의 패러다임을 SW Architecture관점에서 정의한다. Procedure Programming 단순한 명령어의 순차적 수행이 아닌 루틴, 서브루틴, 함수 등을 이용한 프로그래밍 패러다임이다. 여기서 'Procedure'은 '절차적인' 이라는 뜻이 아닌 프로그래밍에서 'Procedure'를 의미한다. Procedure : 필요한 작업을 순서대로 수행하기 위해 '명령을 꾸러미로 만든 함수 'Procedure Programming'의 등장 배경은 '수학적 증명'이다. 프로그램은 '순차', '분기', '..

Architecture란?

정의 아래는 우리가 일반적으로 혼용해서 사용하는 두 용어이다. 아키텍처 (Architecture) : 고수준의 구조 또는 결정사항을 의미 설계 (Design) : 저수준의 구조 또는 결정사항을 의미 두 용어는 본질적으로 같은 의미이다. 둘 모두 SW 전체 설계의 구성 요소이며 개별로 존재할 수 없고 경계는 뚜렷하지 않다. 단지, 고수준에서 저수준으로 향하는 의사결정의 연속성만 있을 뿐. 목표 SW Architecture의 궁극적 목표는 무엇일까? "SW Architecture의 목표는 필요한 SW를 만들고 유지보수에 투입되는 인력을 최소화하는 데 있다." 좋은 설계는 처음부터 제품 수명이 다할 때까지 유지보수 비용을 낮게 유지할 수 있다. 요구사항이 변화할 때마다 비용이 증가한다면 그 설계는 나쁜 설계이..