연산자(Operators)는 5개 테마로 분류할 수 있다. - Transforming, Filtering, Combining , Time Manipulating, Sequence. Transforming 먼저 Transforming 카테고리부터 알아보자. 첫번째 연산자로 collect 연산자가 있다. collect 연산자는 각 개별의 value를 구독 시점에 배열로 한 번에 묶어서 방출시킨다. 만약 받는 개수를 끊어서 받고 싶다면 collect() 에 파라미터 int 값을 넣어 원하는 갯수만큼 이벤트나 value를 받을 수 있다. 다음 Transforming 연산자로는 map 이다. 우리가 일반적으로 아는 map 고차함수와 매우 유사하다. 업스트림에서 밸류를 받아서 개별적으로 처리해준 뒤 다..
전체보기
목차1.1 인터넷이란 무엇인가1.2 네트워크의 가장자리1.3 네트워크 코어1.4 패킷 교환 네트워크1.5 프로토콜 계층과 서비스 모델1.6 공격받는 네트워크1.7 컴퓨터 네트워킹과 인터넷의 역사1.8 요약1.1 인터넷이란 무엇인가 인터넷은 두가지 방법으로 정의할 수 있다. 구성 요소(하드웨어+소프트웨어)가 어떻게 되어있는지와 인프라 구조가 어떻게 구성되어있는지이다. 각 방법을 통해 인터넷이란 무엇인지 살펴보자. 인터넷 구성요소 인터넷은 스마트폰, 컴퓨터와 같은 장치를 연결하는 것이다. 이때 장치를 호스트 혹은 종단시스템(end system) - 호스트는 때때로 클라와 서버로 구분된다 - 이라고 부른다. 종단시스템은 통신 링크(Communication Link)와 패킷 스위치(Packet Switch)..
이전까지 Publisher 와 Subscriber 이제 연산자를 알아보자. 가장 간단한 연산자로는 Sink(읽기) 와 Assign(쓰기) 이 있다.sink 연산자(operator)는 두 개의 컴플리션 핸들러를 가지고 있다. 하나는 값을 받는 receiveValue() 메서드, 하나는 구독이 끝났을 때 호출 되는 receiveCompletion() 메서드이다. 위 예제에서 사용된 Just는 Publisher의 한 종류로 단 하나의 값만을 방출하고, 그 후에는 완료 이벤트를 보낸다. assign(to:on:) 연산자는 특정 객체의 프로퍼티에 값을 자동으로 할당하는 데 사용된다. 내부를 들여다보면 ReferenceWritableKeyPath 타입을 통해 추상화된 프로퍼티 위치를 이용해 접근해서 쓰기 작업을..
답변 요약VC 생명주기는 크게 6단계가 있습니다.순서메서드명역할1loadView뷰를 메모리에 올리는 과정으로 뷰를 바꿀 수 있는 시점2viewDidLoad스토리보드 뷰들과의 연결이 끝난 시점으로 뷰가 생성되었을 때 한 번만 호출3viewWillAppear실제 스크린에 뷰가 나타나기 전에 호출된다 (뷰가 화면에 나타날 때마다 호출)4viewIsAppearing뷰가 계층 구조에 추가되어 정확한 모양(size, safe area)을 가졌을 때 호출(wwdc23 에서 소개된 메서드로 뷰가 띄워져있을 때 UI를 업데이트하기 최적의 장소)5viewDidAppear실제 스크린에 뷰가 나타난 후에 호출6viewWillDisappear실제 스크린에 뷰가 사라지기 전에 호출7viewDidDisappear실제 스크린에 뷰가..
콤바인 이전, 상태변화에 대한 비동기처리는 여러 방법으로 나뉘어져 있었다. 컴파인은 이렇게 여러방법으로 처리되던 비동기+상태관리를 타노스마냥 한 방에 처리해주는 녀석이다.(주의할 점: iOS13부터 사용할 수 있다.) Rx의 심장이 Observable인 것처럼 Combine의 심장은 Publisher 라고 볼 수 있다. Publisher가 방출하는 이벤트를 받는 녀석은 subscriber이다. Publisher 가 방출하는 이벤트를 Subscriber가 받는 과정은 위와 같이 진행된다. 이때 2번은 프레임워크 내부적으로 동작하는거라 개발자 입장에서는 크게 신경쓰지 않아도되는 부분이다. Publisher는 프로토콜로 되어있다. 내부를 살펴보자. FRP의 모나드 개념을 적용시켜 associatedTyp..
요약Userdefaults를 통해 데이터를 저장할 경우 특정 ".plist" 파일에 데이터를 저장하게 됩니다. (보통 앱의 Library 폴더 안 Preferences 디렉토리에 위치). 이때 plist는 키-값 형식의 XML 형식이기에 1차원적으로 저장됩니다. 기본적으로 단순한 데이터 타입(예: String, Int, Bool 등)을 저장하기 위한 구조라고 볼 수 있습니다. 물론 데이터를 하나하나 키밸류 쌍으로 주먹구구식으로 넣을 수 있지만 이는 객체지향 프로그래밍을 하는 클라쪽과 맞지않고 불필요한 공간 또한 차지하게 됩니다. 서로 연관있는 커스텀 객체에 Codable을 채택하면 Data 타입으로 Userdefaults에 저장할 수 있게되어 데이터를 객체지향적으로 관리할 수 있습니다.부가 설명UserD..
요약ORM 이란 Object Relational Mapping 의 약자로 OOP 프로그래밍으로 작성되어있는 클라와 SQL방식의 테이블 형태로 저장되어있는 데이터를 맵핑하는 역할을 수행합니다.부가 설명 DB에 저장된 데이터는 테이블로 이루어진 다소 1차원적인 반면 클라쪽에서는 OOP 프로그래밍이 자리잡으면서 DB와 클라간 간극이 생겼다. 데이터를 저장하고 가져옴에 있어 둘 사이의 브릿징 역할을 해주는 것이 바로 ORM이다. DB에 있는 테이블을 객체로 보고, 테이블의 각 칼럼을 멤버 변수로, 꼬리에 있는 칼럼을 또다른 테이블(객체)의 컴포지셔닝으로 맵핑하는 역할을 수행한다. ORM은 크게 Schema Object, Query Builder, Migration Tool 3가지로 구성되어있다. Schema ..
현실 TCP 통신은 패킷 하나하나만 주고받는게 아닌 우르르 패킷을 보내고 또 우르르 패킷을 받는 파이프라인 프로토콜 방식을 사용한다. 파이프라인 프로토콜의 대표적인 규칙은 ARQ (Automatic Repeat reQuest) 프로토콜이 있고 여기에는 go-back-N 과 selective repeat 두 가지 동작방식이 있다. (TCP는 ARQ보다 좀더 발전된 방식 사용) Pipeline protocol을 준수하여 정보를 한 번에 여러개를 보내게 된다고 했을 때 보내지는 대량의 정보에 대해 무작정 보내는 것이 아닌 일종의 기준이 있다. 이때 Go-Back-N 방식은 sender에서 전송할 패킷의 개수를 정하는 방식이다. 이때 전송자가 보낼 수 있는 연속적인 패킷의 최대 개수 기준이 있는데 이를..
목차1. Identifiable 프로토콜을 통한 데이터 뿌리기2. SwiftUI의 뷰 업데이트 방식3. SwiftUI의 상태관리 (주의: WWDC에서 소개된 내용 중 중요하지 않다고 판단된 내용은 제외시켰음)Identifiable 프로토콜을 통한 데이터 뿌리기 SwiftUI는 껍데기 UI들을 컴포지셔닝으로 만든 뒤 상위에서 Source Of Truth 를 관리하면서 하위 뷰들에게 데이터를 뿌리는 형태이다. List(UIKit에서의 테이블뷰와 컬렉션뷰 대체)를 예로 들자면 테이블뷰와 각 셀의 내용물은 하나의 셀 껍데기만 만들어 반복으로 돌리면 된다. 여기서 사진, 텍스트의 모양, 위치, 색과 같은 껍데기는 같다. 이제 문제는 어떻게 각 셀마다 다른 내용물을 뿌려줄 것인가이다. 생각해보면 모델은 똑같다...
Great App 을 만들기 위한 가장 빠른 도구 SwiftUI UI는 앱 제작에 있어서 빠질 수 없는 요소이다. UI에는 텍스트 필드, 버튼 뿐만 아니라 다크모드, 로컬라이제이션 지원 등등 다양한 요소가 들어가게된다. 이때 UI적인 요소를 크게 두 가지로 나눌 수 있는데 버튼, 텍스트필드, 라벨과 같은 이미 정형화된, 고정된 (Basic Feature) UI와 애니메이션 효과, 다이나믹 타입, 로컬라이제이션과 같은 커스터마이징적인(Custom Features) 요소가 있다. "훌륭한"앱일 수록 정형화된 UI요소보다 이러한 커스터마이징한 요소가 많아지게 된다. 애플은 개발자가 Custom Features UI에 집중할 수 있도록 선언형/반응형 도구인 SwiftUI를 만들어 개발자가 빠르고 쉽게 Bas..