Transforming 과 Filtering 에 이어서 Combine 연산자들에대해 알아보자. 먼저 Prepending 연산자이다. prepend 연산자는 하나 이상의 값을 스트림 앞에 추가하는데 사용된다. 가져올 스트림 앞에 이벤트를 붙여주고 싶을 때 append연산자를 사용하자. Combining 연산자인 append 연산자는 prepend 처럼 값이나 퍼블리셔에 더해주는 연산자지만 prepend는 앞에붙여주었다면 append는 뒤에 붙여주는 연산자이다. switchToLatest 연산자는 중첩된 Publisher를 다룰 때 유용합니다. Publisher가 또 다른 Publisher를 방출할 때 사용되며, 최신 Publisher가 방출하는 값만을 구독하고 이전에 구독하던 Publisher는..
전체보기
Flutter Widget Rendering Flutter widget의 렌더링 순서는 위와같다. 1. 먼저 사용자의 인풋을 받아들이고 2. 시간에 따라 UI를 움직이고, 3. 스크린에 위젯을 만들고 4. 스크린 위에서 위치를 잡고, 5. 위치잡은 위젯의 직접적인 내부 구현물을 채우고, 6. 위치와 내부가 채워진 위젯들의 겹쳐진 순서를 ordering 한 뒤에 7. 지금까지 한 작업들을 GPU가 이해할 수 있는 명령어로 바꾸어 실제 화면에 렌더링을 한다. 렌더링 과정은 크게 렌더링 파이프라인과 Graphics 파이프라인으로 나뉘고 각각 다른 스레드를 사용한다. Rendering Pipeline 은 UIThread에서 실행되며 총 5단계 phase로 나누어진다. (위에 나온2,3,4,5,6) Grap..
이전의 Transport 레이어까지 세그먼트를 보내는데 있어서 유실되면 다시 재전송하는등 어떻게 reliable한 transfer를 할 것 인가에 집중했다면 IP부터, 즉 Network 레이어부터는 어떻게 패킷을 receiver에 안전하게 보낼 것인가에 대해 다룬다. 따라서 네트워크레이어의 IP는 패킷을 어떻게 목적지까지 배송할 것인가라는 역할을 맡는다. 이전에 말한 것처럼 라우터가 패킷을 받으면 패킷을 검사하는 시간을 가진다. 여기서 패킷의 목적지, 헤더의 checksome을 통해 에러 유무를 확인한다. 여기서 소요되는 시간을 Processing Delay 라고 배웠었다. 결국 라우터의 핵심적인 일은 패킷을 받으면 어디로 패킷을 보낼지 방향을 설정하는 것이다. 이렇게 올바른 목적지로 쏘는 작업을 fo..
Filtering 카테고리 연산자들은 Publisher로부터 값을 받아서 설정해놓은 조건에 맞는 녀석들만 다운스트림으로 내려보내는 연산자이다. 앞선 transforming 연산자들과 비교했을 때 업스트림으로부터 내려오는 값을 바꾸는 것이 아닌 걸러내는 역할을 수행한다. 먼저 Filter() 연산자가 있다. 가장 단순한 필터 연산자로 원하는 조건에 따라 필터링해서 다운스트림에 내려보낸다. removeDuplicate() 연산자는 이름 그대로 중복된 값들을 제거해주고 다운스트림에 내려보낸다. compactMap 은 nil을 필터링한 밸류값을 다운스트림에 전달한다 위코드예시에서 Int값으로 변환이 되지 않은 밸류는 필터링하고 변환된 값만 다운스트림에 내려보내는 것을 알 수 있다. ignoreOutpu..
요약뷰의 드로잉 사이클에는 크게 3가지가 있습니다. 먼저 Constraints(제약)을 업데이트하고 재배치하고 다시 뷰를 그리는 방식입니다. 구체적인 메서드로는 오토레이아웃을 업데이트 하는 updateConstraints(), 하위 뷰의 레이아웃 위치와 크기를 재조정하는 layoutSubviews(), 색상/이미지/텍스트 등 실제 내부 컨텐츠를 다시 그리는 draw() 메서드가 있습니다., 부가설명app이 실행되면 iOS의 UIApplication이 Main Thred에서 main run loop를 실행시킨다. 메인런루프는 화살표대로 한바퀴씩 돌며 이벤트를 처리한다. 뷰를 업데이트 하는 사이클은 메인 런루프에서 발생한다고 볼 수 있다. 메인 런루프는 3.5ghz로 1초에 35억번의 일을 처리한다. 마지막..
연산자(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..