전체 글 45

Application Layer가 뭘까?

Application Layer? Application Layer는 대표적으로 Internet Protocol suite(TCP/IP) 그리고 OSI 모델에 둘다 존재하고 있습니다. 비록 두 모델에서는 Application Layer 라는 공통적인 단어를 사용하고 있으며, 각 모델에서의 제일 높은 Level에 위치하는 Layer입니다. 그렇지만, 자세한 정의와 목적들은 다릅니다. Software Layer라고도 한다. 뭐가 다를까? Internet protocol suite 에서의 Application Layer Internet protocol suite에서의 Application Layer는 컴퓨터 네트워크에서 Internet Protocol(IP)를 사용하여 process-to-process 통신들에..

Network 2022.01.25

Coordinator Pattern 연습 1

Coordinator Pattern을 연습해 보았습니다. 우선 Coordinator 라는 영어 단어의 의미를 생각해 보았습니다. 가장 눈에 들어왔던 의미는 '진행자'였습니다. View Controller들 사이의 흐름에 대한 구조를 구성하기 위한 즉, "View Controller들 사이에 진행자인 Coordinator가 View Controller의 흐름을 컨트롤 해주는구나!" 정도로 이해중입니다. Raywenderlich의 Coordinator Pattern 자료에는 Router라는 녀석도 함께 나오는데 간단하게 정리해보자면, Router : Router는 어떤 View Controller를 보여줄지 모르지만, View Controller를 어떻게(How) 보여줄지에 대한 정의를 하는 녀석입니다. C..

Design Patterns 2022.01.25

URLSessionWebSocketTask

URLSessionWebSocketTask는 URLSessionTask의 서브클래스로, TCP와 TLS를 통해 WebSocket의 형태로 이루어지는 message-oriented 트랜스포트 프로토콜을 제공하고 있습니다. 그리고 RFC 6455에 정의된 WebSocket Protocol을 따릅니다. TCP? (Transmission Control Protocol) TCP는 인터넷 프로토콜의 주요 프로토콜 중 하나로, 신뢰적 데이터 전송을 위해 오류 검출, 재전송, 누적 확인 응답, 타이머, 순서 번호와 확인 응답 번호를 제공합니다. TCP는 또한 연결지향형으로 클라이언트와 서버 사이에 데이터가 오가기 위해서는 사전에 연결을 성사시켜놓아야 합니다. TLS? (Transport Layer Security) T..

Network 2022.01.17

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

Understanding Swift Performance - 3

이번에는 Generic을 활용한 Performance적인 부분을 한번 살펴보도록 하겠습니다. // Drawing a copy protocol Drawable { func draw() } func drawACopy(local : Drawable) { local.draw() } Drawable이라는 프로토콜 타입을 파라미터로 받는 drawACopy 메서드가 있습니다. 우리가 이것을 사용할때에는 아래의 코드와 같이 사용할 수 있습니다. // Drawing a copy protocol Drawable { func draw() } func drawACopy(local : Drawable) { local.draw() } let line = Line() drawACopy(line) //... let point = P..

WWDC 2021.03.07

Understanding Swift Performance - 2

이번에는 Protocol Type과 Generic Code의 Performance에 대한 부분입니다. Protocol 이번에는 Protocol 타입을 활용한 코드로 살펴보겠습니다. protocol Drawable { func draw() } struct Point: Drawable { var x, y: Double func draw() { ... } } struct Line: Drawable { var x1, y1, x2, y2: Double func draw() { ... } } var drawables: [Drawable] for d in drawables { d.draw() } Drawable 클래스 추상화를 대신하여 이번에는 Protocol Drawable을 사용한 모습을 볼 수 있습니다. 그리고..

WWDC 2021.03.07

Understanding Swift Performance - 1

WWDC2016의 세션 중 하나인 Understanding Swift Performance에 대한 공부를 해보았습니다. Understanding Siwft Performance 올바른 추상화 메커니즘을 선택하는 것은 코드를 만드는 과정, Performance적인 부분에서 많은 영향을 줍니다. Struct를 사용하여 모델링을 할 것인지? Class를 사용하여 모델링을 할 것인지? 정말 자주하는 고민입니다! 추상화를 설계하고, 추상화 mechanism을 선택할 때 어떤 부분을 고려할 수 있을까? 내 instance가 Stack에 할당하는게 좋을까? 아니면 Heap에 할당하는게 좋을까? (Allocation) 이 instance를 전달할 때 얼마나 많은 Reference Counting 오버헤드를 발생시킬까?..

WWDC 2021.03.04

Unowned?

Unowned? CoreData를 공부하면서 많은 클로저에 아래와 같은 형식으로 쓰는것을 보고 unowned에 대해서 찾아보게 되었습니다. { [unowned self] 변수 in } Unowned variables는 weak variables와 소유권(ownership)이 없는 상태에서 데이터를 참조할 수 있는 방법을 제공하는 점에서 유사한 면이 있습니다. 그러나, weak variables같은 경우에는 nil이 될 수 있습니다. 반면에 unowned variables는 initialized되고 나면, nil이 될 수 없습니다. 즉, optional unwrapping을 걱정할 필요가 없다는 의미입니다. 그렇다면 자주 쓰이는 형식인 위의 코드에 클로저 내부에 있는 [unowned self]의 의미는 무..

Swift 2021.02.28

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