iOS 개발 23

[iOS] UINavigationController

[iOS] UINavigationController Navigation Controller 는 1개 이상의 자식 View Controller 를 관리하는 컨테이너 View Controller 입니다. 한번에 하나의 자식 View Controller 만 화면에 나타낼 수 있으며, View Controller 에서 아이템을 선택하면 애니메이션을 이용해 새로운 View Controller 을 화면에 표시하고, 원래 화면에 존재하던 View Controller 는 가려지게 됩니다. 화면 상단의 Navigation Bar 에 있는 Back 버튼을 누른다면 현재 표시되고 있는 View Controller 는 화면에서 제거되고 그 아래 있던 View Controller 가 표시됩니다. Navigation Stack ..

iOS 개발/iOS 2022.06.30

[iOS] 앱 생명주기 (App LifeCycle)

[iOS] 앱 생명주기 (App LifeCycle) 생명주기란, 앱이 최초 실행될 때부터 앱이 종료될때까지의 주기를 뜻하며, 앱은 이 주기동안 여러 상태를 가집니다. 오늘은 iOS 앱의 생명주기에 대해 알아보도록 하겠습니다. 앱의 상태 앱의 상태는 현재 수행 가능한 동작과 수행 불가능한 동작을 결정짓습니다. 예를 들어 Foreground 상태인 앱은 화면을 점유하고 있기 때문에 시스템 리소스보다 높은 우선순위를 가지고 있습니다. 반대로 Background 상태인 앱은 최소한의 작업을 수행해야 합니다. 사실 가급적이면 아무것도 하지 않는게 좋습니다. 만약 앱의 상태가 변경된다면, 앱은 그에 따라 다른 동작을 수행해야 합니다. 이러한 상태들과 생명주기는 iOS 12 까지 UIApplicationDelegat..

iOS 개발/iOS 2022.06.24

[iOS] Frame & Bounds

[iOS] Frame & Bounds Frame 과 Bounds 는 모두 UIView 의 CGRect 프로퍼티로 각각의 origin 과 size 를 가지고 있습니다. 얼핏 보았을때는 같은것이 아닐까 싶을수도 있지만, 오늘은 이 둘의 차이점에 대해 명확하게 알아보도록 하겠습니다. Frame 먼저 Frame 은 자신의 SuperView (상위 뷰) 의 좌표시스템에서의 위치와 크기를 나타냅니다. 이 말은 곧 자신의 SuperView 를 어떤 좌표평면으로 가정하고, 자기 자신은 해당 좌표위에 존재하는 View 라고 생각할 수 있겠죠? 예시로 가장 바깥쪽의 하얀색 영역을 First View, 안쪽의 핑크색 영역을 Second View, 그 안쪽의 노란색 영역을 ThirdView 라고 하겠습니다. 각 View 들은..

iOS 개발/iOS 2022.06.17

[iOS] UITableView & UICollectionView

[iOS] UITableView & UICollectionView 앱 내에서 여러 컨텐츠를 보여주기 위해서는 리스트 형태로 출력하는것이 매우 효과적입니다. iOS 에서는 UITableView 와 UICollectionView 를 이용해 리스트 형태를 구현할 수 있는데, 오늘은 이 둘의 특징에 대해 알아보겠습니다. UITableView 단일 Column 을 가지고 Row 마다 데이터를 표시하는 View UIScrollView 를 상속받으며 수직 스크롤만 가능 Section 을 이용해 Row 들을 그룹화할 수 있음 각 Section 은 Header 와 Footer 를 옵션으로 가질 수 있음 TableView 는 계층구조의 데이터가 있는 앱에서 일반적으로 사용됩니다. TableView 와 Navigation ..

iOS 개발/iOS 2022.06.17

[iOS] ViewController LifeCycle (생명주기)

[iOS] ViewController LifeCycle (생명주기) UIKit 을 이용해 앱을 개발하다보면 viewDidLoad() 라는 메소드를 보신적이 있을겁니다. 이는 ViewController 의 생명주기 메소드중 하나입니다. 생명주기란 ViewController 가 생성되고 사라지는 등 View 의 상태와 관련된 과정을 뜻하는데, 오늘은 이 생명주기 메소드들에 대해 알아보겠습니다. 위 이미지는 ViewController 의 생명주기라고 검색하면 쉽게 찾아볼 수 있는 이미지입니다. 하지만 위의 이미지에 포함되어있는 viewDidUnload() 메소드는 iOS 6 부터 사용되지 않고 있습니다. ViewController 의 생명주기에 대한 아무 지식이 없다고 가정했을 때 위 이미지가 이해하기 쉬운 ..

iOS 개발/iOS 2022.06.16

[Swift] GCD & Dispatch Queue

[Swift] GCD & Dispatch Queue 프로그램은 실행되며 여러가지 작업을 수행해야 하는데, 멀티스레드 프로그래밍을 이용하지 않고 하나의 스레드에서 작업을 모두 수행한다면 당연히 많은 시간이 걸릴것입니다. iOS 의 메인 스레드는 UI 를 화면에 그려주는 스레드입니다. 이 경우 화면에 UI 를 그려줘야 하는데, 단순 연산이나 네트워크 요청 등 다른 작업들을 모두 메인 스레드에서 실행한다면 앱이 버벅거릴수도 있을 것입니다. GCD (Grand Central Dispatch) 그래서 다른 스레드에서 여러 작업을 수행할 수 있도록 적절하게 분배해주는 과정이 필요합니다. 이는 동시성 프로그래밍이라고 불립니다. GCD 는 멀티코어와 멀티프로세싱 환경에서 최적화된 프로그래밍을 할 수 있도록 해줍니다. ..

iOS 개발/Swift 2022.05.27

[Swift] 싱글톤 패턴 (Singleton Pattern)

[Swift] 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴이란, 특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 패턴입니다. 클래스가 여러차례 호출되더라도, 인스턴스는 딱 한번만 생성되게 하는 것입니다. 이렇게 되면 전역변수처럼 코드의 어느 곳에서 접근하던 간에 같은 메모리에 접근이 가능해집니다. 예제 사용자의 정보를 저장하는 UserInfo 라는 클래스를 만들고 A, B, C 라는 3개의 ViewController 가 있다고 가정해보겠습니다. A 에서는 사용자의 이름을, B 에서는 사용자의 전화번호를, C 에서는 사용자의 주소를 추가하기 위해 각각 UserInfo 인스턴스를 생성하여 값을 넣어주었습니다. 하지만 이렇게 된다면 A, B, C 에서 각각 인스턴..

iOS 개발/Swift 2022.05.20

[Swift] 타입 캐스팅 (Type Casting)

[Swift] 타입 캐스팅 (Type Casting) 타입 캐스팅은 인스턴스의 타입을 확인하거나 어떠한 클래스 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 캐스팅하는 방법입니다. Swift 에서 타입 캐스팅은 is 와 as 연산자로 구현됩니다. 이 두 연산자는 값의 타입을 확인하거나 값을 다른 타입으로 캐스팅하는 간단한 방법을 제공합니다. 타입 캐스팅을 이용하여 타입이 프로토콜을 준수하는지 확인할 수도 있습니다. 타입 캐스팅을 위한 클래스 계층 정의 클래스 및 서브 클래스들의 계층 구조와 타입 캐스팅을 이용한다면 특정 클래스 인스턴스의 타입을 확인하고 해당 인스턴스를 동일한 계층 구조 내의 다른 클래스로 캐스팅할 수 있습니다. 위의 코드에는 MediaItem 이라는 클래스와, 이를 상..

iOS 개발/Swift 2022.05.19

[Swift] 프로토콜 (Protocols)

[Swift] 프로토콜 (Protocols) 프로토콜은 메소드, 프로퍼티, 요구사항의 청사진을 정의합니다. 프로토콜은 클래스, 구조체, 열거형에 의해 채택될 수 있으며 이 때 프로토콜이 요구하는 사항을 모두 충족하면 해당 프로토콜을 준수한다고 합니다. 준수해야 하는 타입의 요구사항을 정의하는 것 외에도 요구사항의 일부를 구현하거나, 준수하는 타입에 추가 기능을 구현하기 위해 프로토콜을 확장할 수 있습니다. 프로토콜 구문 프로토콜은 클래스, 구조체, 열거형과 비슷한 방법으로 선언할 수 있습니다. 프로퍼티, 메소드 요구사항 프로퍼티 프로퍼티는 타입과 이름만 지정 연산 프로퍼티인지, 저장 프로퍼티인지는 지정하지 않음 타입 프로퍼티는 항상 static 키워드 사용 gettable / settable 여부 작성 ..

iOS 개발/Swift 2022.05.13

[Swift] 확장 (Extensions)

[Swift] 확장 (Extensions) Extensions 는 이미 선언된 클래스, 구조체, 열거형 혹은 프로토콜 타입에 새로운 기능을 추가할 수 있다는 것을 의미합니다. Extensions 를 이용하면 다음과 같은 일을 수행할 수 있습니다. Computed Property 추가 메소드 정의 새로운 initializer Subscript 정의 Nested Type 정의 기존 타입이 Protocol 을 채택하도록 함 Extension 구문 extensions 키워드를 이용하여 선언할 수 있습니다. Extension 은 하나 이상의 Protocol 을 채택하여 기존 타입을 확장할 수 있습니다. 연산 프로퍼티 (Computed Properties) 확장을 이용하여 기존 타입에 연산 프로퍼티를 추가할 수 있..

iOS 개발/Swift 2022.05.13