분류 전체보기(52)
-
Using Existential and Generic feat.Dispatch
Tuist를 통한 모듈화를 하면서 build 최적화에 관심을 가지게 되었다. 그 중에 하나가 static dispatch와 dynamic dispatch이다.단순하게는 class 선언 시 final을 붙이거나, property에서 private을 붙여 최적화하는 정도만 알았다.다음의 짧은 아티클을 보면서 Protocol을 통한 type 선언 시, dynamic dispatch가 되는 상황을 알아보자!ProtocolSwift는 protocol을 통해 기능과 특징을 정의할 수 있다. 아래는 polinator 역할을 protocol로 정의하고, Insect와 Bee가 이 역할을 수행하는 예시이다.protocol Pollinator { func pollinate(_ plant: String)}struct ..
2024.09.17 -
복잡한 JSON 디코딩하기 - NestedContainer, custom init
1. 복잡한 JSON Model이전에는 quick.io에서 무지성 JSON 복붙으로 모델을 만들었는데, 디코딩 커스텀하는 좋은 예시가 있어서 공유해본다.위의 GeoJSON은 type, metadata, features, bbox라는 4개의 키를 가진 JSON 모델이다. 각각의 키값은 단일 값일 수도, 배열일 수도, 다른 오브젝트를 자식으로 가질 수 있다.우리는 earthquake만을 필요하기 때문에 전체를 디코딩하기 보다는 features 키안의 필요한 값만 디코딩해볼 것이다.Keyed Contaienr and UnKeyed ConatinerContainer는 Keyed 또는 UnKeyd이다. 일반적으로 우리가 써왔던 유일한 값들은 Keyed이다. 반면, UnKeyed는 unnamed element로,..
2024.09.17 -
WebRTC 앱 만들어보기: (1) Domain 지식
등장 배경WebSocket(Web Real Time Communication)은 서버의 중개를 거쳐 통신을 한다. 따라서, Client가 늘어나고, 프레임의 크기가 커질 수록 서버의 부담이 늘어난다.이를 해결하기 위해 등장한 것이 WebRTC이다. P2P로 연결되게 때문에 서버의 부담이 적다. 데이터 송수신에서는 UDP가 이용된다.Signaling두 클라이언트가 1)무엇으로, 2)어떻게 대화할지 서버를 통해 합의하는 과정.IP, 미디어 유형, 코덱 등을 초기화하는 과정Signalling 서버는 양방향 통신이 필요하기 때문에 WebSocket 구현이 일반적임이 시리즈에서는 FireStore를 이용하여 개발해볼 예정SDP(Session Definition Protocol)무엇으로 통신할지: 비디오, 오디오 ..
2024.09.08 -
면접 질문: Closure에서 weak self를 사용하지 않아도 되는 경우?
이 말은 달리 말하면 순환 참조가 일어나는 경우는 언제냐는 질문과 같다. 순환 참조는 두 인스턴스가 서로 강한 참조할 때 발생하고, 메모리 해제되지 않아 누수가 발생한다. swift에서는 이를 회피하기 위해 캡처리스트를 이용한다. 캡처 리스트에서 weak 또는 unowned self를 사용할 수 있다.TL;DL클로저의 생명 주기가 self보다 짧거나 동시에 해제되는 경우 사용하지 않아도 된다.weak self를 사용하는 경우클로저가 self를 강하게 참조하고, 그 클로저가 self의 프로퍼티로 저장되거나 self가 클로저와 긴밀하게 연결되는 경우콜백, 타이머, 네트워크 요청과 같은 비동기 작업에서 weak self를 사용한다.class SomeClass { var completionHandler: ((..
2024.09.08 -
WebSocket: (2) 등장 배경
Web의 시대로 넘어오면서, 응용 계층인 HTTP를 사용하는 웹브라우저에서 실시간 통신을 구현하려는 시도가 있었다.HTTP Pollingbatch time마다 요청을 보내 새로운 이벤트를 확인한다. 실시간 보장하지 않고, 응답이 없어도 계속해서 batch time마다 응답해야하는 낭비가 있다.HTTP Long Polling요청을 보내고, server event가 올 때까지 대기 후, 응답한다. 낭비되는 리소스가 줄어들었지만, 이벤트가 많이 발생한다면, polling과 유사하다.WebSocket의 등장기존의 Socket과 유사하게 연결을 수립하고, 연결이 유지되는 동안, 실시간 메세지 교환이 가능하다.HandshakeClient에서 Get Method로 WebSocket Key와 Upgrade Header..
2024.09.07 -
WebSocket: (1) Socket이란?
socket이란?컴퓨터 조립해본 경험이 있다면 CPU 접촉 단자를 소켓이라고 부르는 것을 들어보았을 것이다. 연결부를 뜻한다.alt; cpu socket imageNetwork SocketClient와 Server 사이 Connection을 가지고 네트워크 상에서 데이터를 송수신 할 수 있도록 만든 연결부이다. 이중 OSI 7계층에서 4계층에 해당하는 TCP(Transport Control protocol)을 따르는 소켓을 TCP 또는 TCP/IP 소켓, UDP를 따르는 소켓을 UDP 소켓이라고 한다.Socket FlowClinet와 Server의 Flow 차트는 다음과 같다.Client클라이언트가 소켓을 create하고, connect연결 요청을 한다. 연결이 수립(establish)되면, 그 때부터,..
2024.09.07