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

Si Jong Tech Blog

  • 분류 전체보기 (253)
    • ◽️ Programming (253)
      • T I L (92)
      • Swift 문법 (23)
      • UIKit (18)
      • SwiftUI (13)
      • TCA (7)
      • RxSwift (7)
      • iOS (44)
      • 회고 (5)
      • ◽️ Algorithm (32)
      • ◽️ Computer Science (12)
  • 홈
  • 태그
  • 방명록
matchedGeometryEffect를 통한 자연스러운 애니메이션 표현 방식

matchedGeometryEffect를 통한 자연스러운 애니메이션 표현 방식

이번에 회사에 새로 입사하게 되어 온보딩 과정을 거치면서 matchedGeometryEffect라는 개념에 대해서 마주하게 되었다. SwiftUI에서 특정 항목에 대한 값 변동으로 인해 diffing을 거쳐 뷰가 변경되는 과정에 대해서는 이해하고 있었고, 애니메이션을 적용했을때 어떤 방식으로 이뤄지는지에 대해 이해는 했지만 조금 더 부드럽게 애니메이션을 구현하고 싶은 순간들이 있었는데 이부분에서 해법을 찾을 수 있는 matchedGeometryEffect를 알게 되었따! 예를 들어 탭을 선택한다고 했을떄 하나의 하단 막대바가 자연스럽게 좌우로 끊김없이 진행되고 싶을때 기존처럼 그냥 SwiftUI를 통해 조건문을 넣어 랜더링을 하게되면 상태값에 따라 뷰가 다시 그려지기 때문에 자연스럽게 이어지는게 아니라 ..

  • format_list_bulleted ◽️ Programming/SwiftUI
  • · 2025. 10. 21.
  • textsms
Sendable protocol과 Actor 개념 재정리

Sendable protocol과 Actor 개념 재정리

Swift Concurrency가 해결하고자 한 문제는 어떻게 보면 되게 간단하다 동시에 여러 스레드가 같은 데이터를 건드려도 안전하게 동작해야한다! 라는 점, 즉 Thread-Safety 문제를 해결하기 위함이다. 기존의 GCD를 활용했을때 문제점은DispatchQueue.global().async { myData.value += 1}이 코드가 여러 스레드에서 동시에 실행되면 하나의 value에 여러 스레드가 동시에 접근하고, 그 결과로 데이터 경합 (Race Condition)이 발생하게 된다. 이런 문제를 막기위해서는 락(NSLock)을 사용하던지, 세마포어, 시리얼큐 등 직접 안정성을 관리했어야 했던점이 불필요한 작업들도 많이 들고 비효율적이었다. 이러한 개념을 좀 해결하기 위해서 Swift C..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 10. 11.
  • textsms
@TaskLocal 프로퍼티 래퍼

@TaskLocal 프로퍼티 래퍼

먼저 프로퍼티 래퍼가 나오게 된 이유에 대해서 설명해보면 프로퍼티 래퍼는 SwiftUI로 넘어오면서 자주 사용하게 되는 개념인데 말 그대로 프로퍼티를 감싸주는 요소라고 생각하면 된다. 프로퍼티 래퍼우리가 상태 추적을 위해 사용하던 State, Binding 등 프로퍼티 래퍼를 사용해 왔다 이 프로퍼티 래퍼는 왜 사용하게 됐을까먼저 프로퍼티 래퍼 안쪽을 살펴보면 프로퍼티의 반복적인 계산 속성을 하나의 프로퍼티 래퍼로 만들어 중복 로직을 작성하지 않고 사용할 수 있게 해주는 개념이다!struct User { private var _name: String = "" var name: String { get { _name.capitalized } set { _name = new..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 10. 6.
  • textsms
TCA TestStore를 활용한 테스트 방식

TCA TestStore를 활용한 테스트 방식

옛날에 UIKit을 바탕으로 구현했던 터틀보카를 SwiftUI TCA를 활용해 마이그레이션을 진행했다. 진행허면서 TCA를 활용해 구현했을 때 가장 활용하고 싶었던 TestStroe를 활용한 테스트 코드 구현에 대해 알아보려고 한다. 먼저 이전에 스터디를 진행하면서 테스트 코드의 중요성? 에 대해 얘기 했을때 했던 얘기가 기억에 남는 것 같다 단순히 테스트 목적 보다 단독적으로 의존성을 분리하고 명확한 책임을 가지는 캡슐화 된 코드 구현을 지향할 수 있다는 말이 제일 와닿았던 것 같다. 먼저 TCA가 자랑하는 테스트 친화적인 구조는 입력이 같아 항상 같은 출력을 보장하도록 리듀서를 구성하여 테스트 코드 구현이 가능하다.TCA는 TestStore를 통해 테스트 진행이 가능한데 이를 통해 완전한 경리를 통해..

  • format_list_bulleted ◽️ Programming/TCA
  • · 2025. 10. 2.
  • textsms
Swift Concurrency에서 작업 취소라는 개념

Swift Concurrency에서 작업 취소라는 개념

앞서 알아본 Concurrency는 async/await와 Task 기반의 동시성을 제공한다. 동시에 여러 일을 수행할 수 있게 되면서 중요한 문제가 생기는데 바로 바로 더 이상 필요 없는 일을 어떻게 중단하게 할건지? 에 대한 내용!! 예를 들어 사용자가 어떤 작업을 입력했는데 곧바로 해당 작업을 변경한다면 이전의 요청은 필요없어지게 된다거나, 화면을 떠났는데 여전히 해당 작업이 진행되게 된다면 불필요한 리소스를 낭비하게 된다. 이러한 점을 컨트롤하기 위해 Swift Concurrency에서는 어떤 작업 취소가 가능한지 한번 알아보도록 하자! 협력적 취소(Cooperative Cancellation)Swift Concurrency의 취소는 강제로 멈춘다의 개념이 아닌 단순히 작업에 깃발을 꽂아두는 것!..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 9. 22.
  • textsms
Swift Concurrency 구조적 동시성을 정리하면서..

Swift Concurrency 구조적 동시성을 정리하면서..

구조적 동시성은 부모-자식 작업 계층을 명시적으로 만드는 모델이다. 부모가 만든 자식들은 일반적으로 병렬로 실행되게 되고, 부모가 끝나기 전에 자식이 모두 끝나도록 보장된다. 이 덕분에 아래와 같은 두가지 특징이 생긴다!작업 수명 (Lifecycle)이 스코프로 묶여 메모리/자원 누수 가능성이 줄고취소 전파와 우선순위 상속 등 런타임이 제공하는 안전장치를 자연스럽게 활용할 수 있다.여기서 Swift에서는 구조적 동시성을 위해 두가지를 제공한다!async letTaskGroup / withThrowingTaskGroup핵심 개념에 대해서 특징 별로 한줄로 요약하면 다음과 같다.병렬 실행 : 자식 작업은 기본적으로 병렬로 동작한다.스코프 보장 : 부모 스코프가 끝나기 전에 자식이 반드시 완료된다.취소 전파 ..

  • format_list_bulleted ◽️ Programming/iOS
  • · 2025. 9. 16.
  • textsms
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
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 26
  • navigate_next
프로필 로고

Si Jong Tech Blog

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

티스토리툴바