Si Jong Tech Blog
close
프로필 배경
프로필 로고

Si Jong Tech Blog

  • 분류 전체보기 (247)
    • ◽️ Programming (247)
      • T I L (92)
      • Swift 문법 (23)
      • UIKit (18)
      • SwiftUI (12)
      • TCA (6)
      • RxSwift (7)
      • iOS (40)
      • 회고 (5)
      • ◽️ Algorithm (32)
      • ◽️ Computer Science (12)
  • 홈
  • 태그
  • 방명록
Swift Concurrency의 Continuation과 Task.sleep, sleep의 차이!

Swift Concurrency의 Continuation과 Task.sleep, sleep의 차이!

오늘은 Swift Concurrency 중에서 Continuation 사용과 sleep의 차이에 대해 알아보자. Continuation먼저 Continuation은 콜백/델리게이트 기반의 비동기 API를 async/await 을 활용할 수 있도록 연결해주는 도구이다. 새로운 동시성 모델을 사용하고 싶은데 당장 구현했던 SDK 혹은 라이브러리가 콜백만 제공하는 구조라면 이럴 때 Continuation을 활용해 래핑해 사용하면 된다는 것! Swift Concurrency에서 async/await는 읽기 쉽고 오류에 강한 비동기 코드를 작성할 수 있게 해준다 이러한 장점 덕분에 많은 부분에서 컨커런시로 전환하고 있지만, 실제로 라이브러리 혹은 SDK를 사용하면 completion handler나 delegat..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 9. 12.
  • textsms
Swift Concurrecy에서 비동기 개념의 확장?

Swift Concurrecy에서 비동기 개념의 확장?

비동기의 구체적인 개념에 대해서 Swift Concurrecy를 사용하면서 내가 생각했던 개념에 대해 다시 짚어봐야할 내용이 있는 것 같아 한번 알아보려고 한다. 이전에 Swift Concurrecy를 사용하기 전에 비동기 처리는 GCD의 DispatchQueue.main.async {} 이런 식으로 사용해서 이 일을 메인스레드에 맡겨 실행하고 나는 기다리지 않겠다 정도의 의미였다. 핵심은 작업을 큐에 넣고 끝이라는 것, 이 실행이 언제 끝나는지는 모르고, 끝났다는 알림을 받고 싶다면 completion handler 같은 콜백을 추가하여 붙여야 했다. 즉 정리하자면, 내가 일을 시키고 기다리지 않는다! 라는 개념으로 실행을 위임하는 단순한 개념이었다. Swift Concurrecy에서 비동기는 단순히 ..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 9. 2.
  • textsms
WebSocket 사용 이유?와 Swift 내 URLSessionWebSocketTask

WebSocket 사용 이유?와 Swift 내 URLSessionWebSocketTask

먼저 채팅 서비스를 구현해야한다고 했을때 다들 대부분 WebSocket을 사용해야하는 것은 알고있지만 어떤 이유로 웹소켓을 활용해야하는지 비교를 통해 개념을 잡아보고 iOS 에서는 어떤 방식을 사용해서 웹소켓을 구현할 수 있는지 구현 전략에 대해서 알아보고자 한다.HTTP 방식과 WebSocket의 차이 통신 방식요청 → 응답 (단방향)지속 연결 (양방향)연결 유지요청마다 새로 연결한 번 연결 후 유지데이터 전송 단위바이트 기반메시지 단위 (텍스트/바이너리)지연시간높음 (요청/응답 반복)낮음 (이벤트 실시간 처리)메시지 지향 (Message-Oriented)HTTP는 바이트 데이터를 주고 받는 방식이라 데이터 경계를 직접 구분해야 한다.WebSocket은 프레임 → 메시지로 구조화 되어있어 데이터를 한건..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 8. 22.
  • textsms

Closure가 인스턴스를 잡을 때! self 명시의 이유

동시성에 대해서 제대로 다시 알아보기 전에 우선적으로 self , escaping 클로저에 대한 내용을 짚고 넘어가보자.메서드를 구현하다보면 self를 명시해야 하는 경우가 생기는데, 정확하게 이 self를 사용하는 이유는 다음과 같다. @escaping 클로저 안에서 인스턴스 멤버에 접근하면, 클로저가 그 인스턴스를 캡처해 함수 스코프 밖에서도 살아남을 수 있기 때문에(보통 힙에 보관되는 형태) “정말 이 인스턴스를 잡아둘 거야?”라는 의도를 명확히 하기 위해 self.를 요구한다. 또한, 파라미터 이름과 프로퍼티 이름이 같을 경우 어떤 것을 가리키는지 분명히 하기 위해서 self를 사용하기도 한다. 코드를 통해서 한 번 보면final class ImageLoader { var isLoading ..

  • format_list_bulleted ◽️ Programming/Swift 문법
  • · 2025. 8. 13.
  • textsms
Swift Concurrency 시리즈 (1) Task

Swift Concurrency 시리즈 (1) Task

오늘부터 새로운 엘런강의를 들으면서 Swift Concurrency에 대해 다시 한번 제대로 공부해 보려고 한다. 그전에 먼저 Task가 뭔지 이전에 그냥 사용해왔던 개념들을 짚어보면서 어떤 방식으로 구현되는지 등 개념적인 측면에서 한번 다시 작성해보고 넘어가보자 먼저 가장 기본이 되는 Task에 대해서 정리해보면 Task는 단순 비동기 코드가 아니라 비동기 함수를 실행하고, 그 실행 상태를 보존하며, 중단과 재시작이 가능한 일급 객채! 라고 생각하면 된다. 그렇다면 왜 Task가 필요한 걸까loadUser { user in fetchPosts(for: user) { posts in updateUI(with: posts) }}기존에 Swift에서는 Completion handler..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 8. 7.
  • textsms
Swinject이요? (1/2)

Swinject이요? (1/2)

요즘 회사일,, 사이드 프로젝트,, 공모전까지.. 정말 너무 바쁜 한달을 보내다보니 블로그 글을 너무 오래 못쓴것같다.. 오늘은 프로젝트를 진행하면서 Swinject을 활용한 DI를 구성하는데 궁금한 내용이 있어 이 부분에 대해 공부를 좀 해보려고 한다. 먼저 왜 DI (Dependency Injection) 이 필요한 걸까? 문제 상황 예시를 한번 보자// ❌ 강한 결합 - 수정하기 어려운 코드class UserService { private let networkManager = NetworkManager() private let coreDataManager = CoreDataManager() func fetchUser(id: String) -> User? { // ..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 7. 18.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 42
  • navigate_next
프로필 로고

Si Jong Tech Blog

전체 카테고리
  • 분류 전체보기 (247)
    • ◽️ Programming (247)
      • T I L (92)
      • Swift 문법 (23)
      • UIKit (18)
      • SwiftUI (12)
      • TCA (6)
      • RxSwift (7)
      • iOS (40)
      • 회고 (5)
      • ◽️ Algorithm (32)
      • ◽️ Computer Science (12)
최근 글
인기 글
최근 댓글
태그
  • #swift
  • #MVC
  • #오블완
  • #티스토리챌린지
  • #알고리즘
  • #tableView
  • #project
  • #IOS
  • #uikit
  • #TIL
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바