SWIFT 19

Create CollectionView Header with UICollectionReusableView

UICollectionReusableView를 활용하여 CollectionView의 Header를 만들어보도록 하겠습니다! UICollectionReusableView? 애플의 개발자문서에 따르면 "A view that defines the behavior for all cells and supplementary views presented by a collection view"라고 합니다. 해석을 해보자면 Collection View가 보여줄 Cell들과 Supplementary view들의 행동을 정의해주는 view라고 할 수 있겠습니다! 실제로 UICollectionViewCell도 UICollectionReusableView를 상속받고있습니다. Supplementary view 역시 이 UICol..

iOS 2021.07.21

Observer Pattern

Observer Pattern에 대해서 공부를 해보았습니다. Observe Pattern은 하나의 Object가 다른 Object의 변화를 관찰하는 패턴입니다. Subscriber Subscriber는 Observer의 역할을 하는 친구입니다. 관찰하고 싶은 Object를 관찰하고, 변경이 일어나면 Update를 받습니다. Publisher Publisher는 관찰이 가능한 Object입니다. 다른 Object가 자신을 관찰할 수 있게 해주고, 변경사항을 보내는 역할을 합니다. Value Value는 값의 변경이 일어나는 근본적인 Object입니다. 이들의 관계를 그림으로 표현해보면 아래와 같은 모습입니다. Swift 5.1 부터 이 Observer Pattern을 더 편하게 활용할 수 있는 Combin..

Design Patterns 2021.06.03

Asynchronous Operations Unit Test (URLSession Unit Test)

Unit Test를 공부하던 중에 평소 Model을 만들어 Mock 데이터를 활용해서 Model이 알맞게 만들어졌는지에 대한 Unit Test만 작성하다가, URLSession data task를 잘 가져오는지 확인하려고 Unit Test를 작성하던 도중 그냥 URLSession 만을 사용해서는 Unit Test 도중에 데이터를 잘 받아왔는지 확인하기도 전에 Unit Test가 Success했다고 나오는 현상을 발견했습니다. 그래서 이번 포스팅에서는 비동기 작업을 Testing하는 방법에 대해 알아보겠습니다. 우선 저는 애플의 공식 문서인 'Testing Asynchronous Operations with Expectations' 라는 Article을 참고하여 공부를 해 보았습니다. XCTestExpec..

iOS 2021.01.27

iOS Application Life Cycle

이번 포스팅에서는 iOS의 Application Life Cycle에 대해서 공부한 부분을 정리해 보도록 하겠습니다. 😄 애플 공식문서의 'Managing Your App's Life Cycle' 이라는 Article을 주로 살펴 볼 예정입니다. 우선! iOS 13 이후 버전 부터는 Scene이라는 개념이 만들어 지고, UISceneDelegate 개체들을 Scene-based 앱의 life-cycle 이벤트에 대응하기 위해 사용하고 있습니다. Scene은 하나의 프로세스에 여러개가 존재할 수 있고, Scene 하나하나마다 Life Cycle을 따로 가지고 있기 때문에, 하나의 앱에서 여러개의 Scene이 각각 다른 상태에서 동작이 가능합니다. 예를들어, 어떤 Scene 하나는 Foreground상태에서..

iOS 2021.01.18

Dispatch(1) : What is Dispatch and Dispatch Queue?

[Framework] Dispatch? Dispatch란 멀티코어 하드웨어 환경에서 시스템이 관리하는 Dispatch Queues에 작업을 제출하여 코드를 동시에 실행시킬 수 있는 방법입니다. Grand Central Dispatch(GCD)라고도 알려져 있는 Dispatch는 macOS, iOS, watchOS, tvOS의 멀티코어 하드웨어에서 동시성 코드 실행을 도와주는 체계적이고 포괄적인 개선 기능을 제공하는 언어 기능, 런타임 라이브러리, 시스템 향상을 포함합니다. BSD 서브시스템, Core Foundation, Cocoa APIs 는 모두 향상된 기능을 활용하여 시스템과 애플리케이션을 보다 빠르고 효율적으로, 그리고 향상된 응답성으로 실행할 수 있도록 확장되었습니다. 컴퓨팅 코어의 개수가 서로..

Swift 2021.01.13

Linked List (with Swift) - Removing values

이번에는 Linked List에서의 값을 삭제하는 방법에 대해서 알아보겠습니다. pop : List의 앞에 있는 값을 삭제 removeLast : List의 제일 마지막에 있는 값을 삭제 remove(at: ) : List의 어딘가에 있는 값을 삭제 우선 pop부터 살펴보겠습니다. 제일 앞의 요소를 pop한다면 head가 현재 head의 nextNode로 바뀌게 될 것입니다. 그리고 pop을 했을 시 비어버리는 경우도 생각해야 합니다. 마지막으로 pop을 해준 요소를 리턴해 줍니다. 코드로 나타내 보겠습니다. @discardableResult public mutating func pop() -> T? { defer { //2 head = head?.nextNode if isEmpty { tail = ni..

Data Structure 2020.12.11

Linked List (with Swift) - Node and Adding Values to List

Linked List란 선형의 단방향으로 이루어진 값들의 집합이라 할 수 있습니다. Linked List는 Swift의 Array와 같은 연속적인 저장에 다양한 이론적인 이점을 가지고 있습니다. (상수 시간에 삽입과 삭제가 이루어질 수 있음) 위의 그림과 같이 Linked List는 Node들이 연결된 형태로 존재합니다. Node? Node는 값을 가질 수 있고, 또한 다음 Node와의 Reference를 가집니다. 만약 Reference의 값이 nil 이라면 이 Node가 마지막이라는 의미가 됩니다. Node 타입을 코드로 작성해 보면 public class JoonsNode { public var value: T public var nextNode: JoonsNode? public init(value..

Data Structure 2020.12.10

Stack (with Swift)

Stack은 한국말로 '쌓다' 라는 뜻을 가지고 있습니다. Data Structure에서의 Stack도 개념적으로 실세계의 Stack의 의미와 동일합니다. 어떤 물건을 쌓을때는 위에다가 차곡차곡 쌓습니다. 무거운 20KG짜리 원판을 쌓아올린다고 생각해 봅시다. 20KG 원판을 쌓을때는 제일 바닥에서 부터 쌓아올립니다. 그렇다면 원판을 제거할 때에는 어떻게 할까요? 🧐 바로 이렇게 위에서 부터 제거할 수 있습니다. Data Structure에서의 Stack 또한 이러한 역할을 하게 됩니다. 그리고 이러한 구조를 LIFO (Last-In First-Out)이라고 표현할 수도 있습니다. DataStructure에서의 Stack에서는 아래에서 부터 차곡차곡 어떠한 요소를 쌓는 과정을 Push라고 하고, 위에서 ..

Data Structure 2020.12.10

UIGestureRecognizer (Tap, Pinch, Rotation)

class UIGestureRecognizer : NSObject Gesture Recognizer Object 또는 Gesture Recognizer라는 것은 일련의 터치를 인식하고, 그 인식에 대한 어떠한 동작을 하는 객체입니다. 이 객체가 일련된 Gesture나, Gesture의 변경을 인식하면, 지정된 Target Object로 action message를 보내줍니다. UIGestureRecognizer의 Subclass는 다음과 같은 class가 존재합니다. UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UISwipeGestureRecognizer UIPanGestureRecognizer UIScreenEd..

iOS 2020.12.03