TaskGroup
·
iOS
TaskGroup뭐 간단한 병렬실행이면 async let을 써주면 된다. 하지만 이게 수없이 많다면? async let 계속쓸래??또한 static하게 결정된 task에서만 쓸수 있다. 왜? 우리가 async let 으로 다 일일이 해줘야하기에!!만약 모든 이미지를 가져와야하는경우 필요한 개수를 미리 알수 있을까?⇒ nono 그건 컴파일시점에 알수 있는것이 아닌 런타임 시점에 알수 있다.런타임때마다 달라질수 있는 child Task들을 동적으로 만들어줄수 있다!! 😆 😆 😆Taskgroup을 만들기 위해서는 withTaskGroup(of:returning:body:)를 호출!throwing taskgroup → withThrowingTaskGroup(of:returning:body:) 에러던질때! ..
Swift Concurrency - Async/Await⭐️
·
iOS
GCD의 한계점들.Thread Explosion가장 큰 문제는 Thread Explosion입니다. GCD는 새로운 작업이 들어올 때마다 "혹시 기존 스레드가 block되어 있나?"를 확인하고, block되어 있으면 새 스레드를 생성해버려요. 그런데 제가 이거 실제 DispatchQueue 여러개 찍어내고 해보니까 62개까지 쓰레드가 생성되더라고요. 결국 GCD의 쓰레드풀은 64개인것 같습니다.64개를 넘어가면:새로운 작업들은 기존 스레드가 해제될 때까지 대기하고 스레드 재사용하며 무한정 스레드를 만드는것은 아닙니다.Thread Explosion의 진짜 문제는 개수보다는: 각 쓰레드 마다 가지고 있는 메모리의 오버헤드, context Switching 비용인것 같습니다.Priority Inversion의..
Combine3-Cancellable
·
iOS/반응형프로그래밍
Combine을 공부하다보면 Cancellable이라는 프로토콜을 자주 만나게 된다. 먼지도 모르고 그냥 쓰는 것은 내가 제일 싫어하는 것이기에 공부 바로 시작Cancellable"A protocol indicating that an activity or action supports cancellation."취소를 지원하는 활동 혹은 액션을 나타내는 프로토콜..? 이거 보고 이해하는 사람 있나여? 일단 나는 아님Combine에선 이벤트 스트림을 action이라하는데 이 것을 취소할수 있는 프로토콜이라고 한다.public protocol Cancellable { func cancel()}실제로는 구독의 라이프사이을 관리하는 매커니즘을 제공합니다.구독을 취소하면?:- 퍼블리셔는 더 이상 값을 생성하지 ..
Combine(1)-WhatisCombine(publish&subscirbe)
·
iOS/반응형프로그래밍
Combine이 뭐길래?iOS 13에서 Apple이 선보인 Combine 프레임워크를 처음 접했을 때, "아, 그냥 비동기 처리 도구구나" 하고 넘어가려던 제가 있었습니다. 하지만 실제로 써보니 완전히 다른 이야기더라고요 😅Combine의 진짜 목적은 비동기 처리가 아닙니다.반응형 프로그래밍이라는 패러다임을 통해 데이터 흐름과 변화의 전파에 중점을 둔 선언적 API를 제공하는 게 핵심이에요. 왜냐하면 기존의 명령형 코드보다 가독성과 유지보수성을 극대화할 수 있기 때문입니다.그럼 왜 하필 Apple이 RxSwift가 이미 자리잡고 있는데 Combine을 만들었을까요?RxSwift는 서드파티 라이브러리라서 별도의 프로젝트 설정이 필요하고, 의존성 관리도 해야 했어요. 반면 Combine은 퍼스트파티 프레임..
디스패치 그룹
·
iOS
iOS 개발에서 비동기 작업을 그룹화하고 실행을 제어하는 방법은 매우 중요하다. 여러 개의 비동기 작업이 동시에 실행될 때 작업이 언제 끝나는지 감지하고 후속 작업을 실행해야 하는 경우가 많다. 이때 DispatchGroup과 DispatchSemaphore가 유용하게 쓰인다.1. DispatchGroup(1) DispatchGroup이란?DispatchGroup을 사용하면 여러 개의 비동기 작업을 그룹화하여 해당 그룹의 모든 작업이 끝났을 때 특정 코드를 실행할 수 있다.이것을 활용하면 예를 들어 런치스크린 이후 첫 화면을 로딩할 때, 모든 필수 리소스(이미지, 데이터)를 다 받은 후 UI를 업데이트할 수 있다그룹1의 작업이 여러쓰레드에서 작업을 해도 묶여있고 마지막 task가 끝나는 시점을 알 수 있..
GCD queue.
·
iOS
왜 멀티스레딩이 필요한가?아이폰에는 여러 개의 스레드가 존재합니다. 그런데 왜 앱이 버벅일까요? 🤔간단한 비유로 설명해보겠습니다. 회사에 일꾼이 여러 명 있는데, 한 사람에게만 "야 너 다해!"라고 모든 일을 맡기면 어떻게 될까요?당연히 그 사람은 "아... 할 게 너무 많아..."하며 과부하가 걸리겠죠.iOS에서도 마찬가지입니다. 특히 메인 스레드는 UI 업데이트와 사용자 이벤트 처리라는 핵심 업무를 담당하는데,여기에 무거운 작업까지 몰아주면 앱이 버벅이게 됩니다.저도 처음에는 "스레드가 여러 개면 괜찮지 않나?"라고 생각했는데, 실제로는 작업을 어떻게 분산하느냐가 핵심이더라고요 💡해결책은 간단합니다: 다른 스레드로 작업을 분산하면 됩니다!iOS에서는 직접 스레드를 관리할 필요가 없습니다. 단지 작..
Actor🕴🏻
·
iOS
- What is Data Race?두 스레드가 동기화 없이 동일한 객체에 접근하려 할때 ⇒ Data race이벤트 순서가 프로그램의 정확성에 영향을 미칠때 ⇒ Race Conditionex) Thread별 연산의 실행 순서에 따라 값이 달라질 수 있다! 고로 Data Race≠Race conditionclass MyDataManager { static let instance = MyDataManager() private init() {} var data: [String] = [] func getRandomData() -> String? { self.data.append(UUID().uuidString) print(Thread.current) r..
Frame vs Bounds
·
iOS
깃허브에 돌아다니는 IOS 관련 면접 질문들을 보면 하나씩 꼭 있는 단골질문!! frame과 bounds? 그게 뭔데? 그리고 뭐가 다른데???물론 나도 다르다는 것은 안다. 하지만 설명하라고 질문이 들어왔을때... 어??? 뭐지? 또다시 머리 백지상태나와 같은 피해자(?)가 없도록 아주 아주 자세하고 쉽게 정리를 하려한다. 좋게 읽었다면 그것이 땡큐입니다🥰Frame! superview 좌표계에서 뷰의 위치와 크기를 나타낸다.UIView의 위치(superview), 크기(view영역을 감싸는 사각형 크기)를 나타낼때 사용.여기서 조심해야하는것이 최상위에 있는 뷰가 아닌 superview! 즉 바로 한단계 위 뷰를 기준인것이다.origin(x,y) : superview의 원점을 (0,0)으로 놓고 얼마나..
Socket 통신 개념+구현까지(서버는 nodejs)
·
iOS
소켓이 뭐야?소켓(Socket)은 네트워크 통신에서 프로세스 간의 통신을 가능하게 하는 인터페이스입니다. 소켓은 네트워크 소프트웨어 개발에 사용되며, 클라이언트와 서버 간의 데이터 교환을 관리합니다.소켓은 일종의 추상화된 개념으로, 소프트웨어적으로 구현된 통신 엔드포인트입니다. 소켓은 프로그램이 네트워크를 통해 데이터를 송수신할 수 있도록 인터페이스를 제공합니다. 소켓은 네트워크 계층의 상위 계층인 전송 계층에서 사용됩니다.라고 GPT의 말씀socket에는 IP주소와 Port번호가 있다.1. TCP : IP와 함께 사용하는 프로토콜IP가 데이터 배달을 하고 TCP는  패킷을 추적하고 관리.데이터를 보낼때 한번에 보내는 것이 아니라 이것을 토막내서 보내는데 이 토막의 단위를 패킷이라고 한다.데이터가 제대로..