IOS 23

[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

[Swift] ARC (2/2)

[Swift] ARC (2/2) [Swift] ARC (1/2) 보러가기 [Swift] ARC (1/2) [Swift] ARC (Automatic Reference Counting) 앱의 메모리 사용량을 추적하고 관리 어떠한 클래스 인스턴스가 더 이상 필요하지 않을 때 인스턴스에 할당된 메모리 자동해제 Reference Type 인 클래스 인스턴스 trumanfromkorea.tistory.com 클로저에 대한 강한 참조 사이클 (순환 참조) 순환 참조는 클래스 인스턴스의 프로퍼티에 클로저를 할당하고 해당 클로저의 바디에 인스턴스를 캡처하는 경우에도 발생할 수 있습니다. 클로저의 바디에서 self.someProperty 와 같이 인스턴스의 프로퍼티에 접근하거나 self.someMethod() 와 같이 인..

iOS 개발/Swift 2022.04.29

[Swift] ARC (1/2)

[Swift] ARC (Automatic Reference Counting) 앱의 메모리 사용량을 추적하고 관리 어떠한 클래스 인스턴스가 더 이상 필요하지 않을 때 인스턴스에 할당된 메모리 자동해제 Reference Type 인 클래스 인스턴스에만 적용. Value Type 에는 해당되지 않음 동작 방식 클래스가 새 인스턴스를 생성할때마다 ARC 는 메모리 할당 인스턴스의 메모리가 해제되면 더 이상 해당 인스턴스에 접근 불가능 그래서 ARC 는 인스턴스가 언제까지 필요한지 알기 위해 인스턴스를 참조하는 프로퍼티, 상수, 변수의 수를 추적함 클래스 인스턴스를 할당하기 위해 변수를 3개 선언하고, 나중에 nil 을 할당하여 해제해주기 위해 Optional 로 선언합니다. reference1 변수에 클래스 인..

iOS 개발/Swift 2022.04.29