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

Si Jong Tech Blog

  • 분류 전체보기 (255)
    • ◽️ Programming (255)
      • T I L (93)
      • Swift 문법 (23)
      • UIKit (18)
      • SwiftUI (13)
      • TCA (7)
      • RxSwift (7)
      • iOS (44)
      • 회고 (6)
      • ◽️ Algorithm (32)
      • ◽️ Computer Science (12)
  • 홈
  • 태그
  • 방명록
2025년도를 돌아보며

2025년도를 돌아보며

올해도 어김없이 12월 31일날 한해를 되돌아 보자~~ 작년에 회고를 작성하면서 개발자로 취업에 성공하고 아주 기쁜 마음으로 글을 썼던 기억이 난다 24년도에는 포기하지 않고 끝까지 해보고, 꾸준하게 기록으로 남겨두기, 취업하기 이렇게 목표였는데 다 이뤄서 좋다고도 써놨네 ㅎㅎ올해를 돌아보자면 먼저 25년도 내가 목표했던 내용을 다시 확인해보니 코딩테스트 준비부족한 CS 기술 다지기더 좋은 가치로 평가받기지금처럼 꾸준하게 기록하기 이렇게 목표를 세웠었다. 여기서 내가 이룬건 3번!! 그리고 2번은 아직 부족하고.. 4번은 반쯤..? 코딩테스트는 아직 준비하지 않았다.가장 중요하게 생각했던 목표는 더 좋은 가치로 평가받는 3번이었기 때문에 이점에 초점을 맞춰 올 한해를 잘 보낸 것 같다. 먼저 연초에 지식..

  • format_list_bulleted ◽️ Programming/회고
  • · 2025. 12. 31.
  • textsms
Nuke, NukeUI

Nuke, NukeUI

오늘은 오랜만에 돌아오게 됐는데 이미지 처리 방식이 새로 입사한 회사에서 내가 기존에 사용했던 kingfisher를 사용하는게 아닌 Nuke를 사용하고 있어 이부분에 대한 개념을 정리하고 나아가 이미지 캐싱 처리 방식에 대해 살짝 개념을 잡아가기 위해 작성하게 됐다. 앱 최적화를 시키면서 이 이미지 최적화는 항상 따라오는 문제인 것 같다. 왜냐하면 모바일 환경에서 이미지를 매번 네트워크에서 받아오는 방식이다보면 엄청나게 많은 비용이 발생하고 앱 성능이 떨어질 수 있기 때문이다. 계속해서 같은 이미지를 다운로드하면 배터리 및 데이터 부분에서 많은 소모가 일어나고 CPU 과부하로 인해 앱 성능이 많이 떨어질 수 있게 된다. 이런 문제를 어느정도 해결하기 위해 대부분의 이미지 처리는 메모리 및 디스크 캐싱으로..

  • format_list_bulleted ◽️ Programming/T I L
  • · 2025. 11. 21.
  • textsms
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
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 26
  • navigate_next
프로필 로고

Si Jong Tech Blog

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

티스토리툴바