전체 글
-
iOS Swift Concurrency 완전 정리 — 개념, 장단점, 그리고 "언제 써야 하는가"iOS 2026. 7. 28. 17:58
iOS Swift Concurrency 완전 정리 — 개념, 장단점, 그리고 "언제 써야 하는가"async/await만 쓰는 게 Swift Concurrency는 아닙니다. Swift 5.5에서 시작해 Swift 6.4(WWDC26)까지 온 이 모델을, 개념 → 구성 요소 → 장단점 → 도입 판단 기준 순서로 정리했습니다.1. Swift Concurrency란 무엇인가정의Swift Concurrency는 2021년 WWDC, Swift 5.5에서 도입된 언어 차원의 동시성 모델입니다. 단일 기능이 아니라 다음 요소들의 묶음입니다.async / await — 비동기 함수와 일시 중단(suspension)Structured Concurrency — async let, TaskGroup을 통한 작업 계층 구조..
-
TCA(The Composable Architecture) 제대로 이해하기iOS 2026. 7. 27. 17:13
1. TCA가 뭔가요TCA는 Point-Free(Brandon Williams, Stephen Celis)가 만든 애플리케이션 아키텍처 라이브러리입니다. 공식 문서 표현을 그대로 옮기면 "composition, testing, ergonomics를 염두에 두고 일관적이고 이해하기 쉬운 방식으로 앱을 만들기 위한 라이브러리"예요.여기서 짚고 갈 게 하나 있는데, TCA는 "아키텍처 패턴"이 아니라 "런타임을 포함한 라이브러리"입니다. MVVM이나 Clean Architecture는 문서와 규율만 있으면 어떤 프로젝트에서도 따라 만들 수 있죠. 반면 TCA는 Store, Effect, TestStore 같은 실제 동작하는 타입을 제공하고, 그 대가로 서드파티 의존성을 코드베이스 가장 깊은 곳에 박아넣습니다...
-
[Flutter] Riverpod으로 상태 관리 하기Flutter 2025. 8. 9. 22:16
Flutter 애플리케이션을 개발할 때, 프로젝트의 규모가 커지고 복잡해질수록 상태 관리의 중요성은 더욱 커집니다. 복잡하게 얽힌 상태는 개발 효율성을 떨어뜨리고 유지보수를 어렵게 만드는 주요 원인이 될 수 있습니다.이번 포스팅에서는 Flutter 개발의 핵심 개념인 상태 관리가 무엇인지 먼저 알아보고, 그 문제를 가장 우아하고 효율적으로 해결해 주는 Riverpod에 대해 자세히 소개해 드리겠습니다.🚀 상태 관리란 무엇일까요?상태 관리를 이해하려면 먼저 상태(State)가 무엇인지 알아야 합니다.간단히 말해, 상태란 시간이 지남에 따라 변할 수 있는 모든 데이터를 의미합니다. 앱의 '기억'이나 '현재 상황'이라고 생각할 수 있습니다. 예를 들면 다음과 같은 것들이 모두 상태에 해당합니다.사용자의 로그..
-
Android 앱 디컴파일 과정 및 방법 정리보안 2025. 5. 22. 21:52
안드로이드 앱의 APK 파일을 분석하거나 내부 구조를 확인할 때 디컴파일(decompile)이 유용합니다. 이 포스팅에서는 디컴파일의 개념과 사용되는 주요 도구들에 대한 설명을 포함하여, 맥북에서 HomeBrew를 통해 APK 파일을 디컴파일하는 방법을 단계별로 안내하겠습니다.디컴파일이란?디컴파일(Decompile)이란 실행 가능한 바이너리 파일(예: APK)을 원본 소스 코드와 유사한 형태의 코드로 변환하는 작업입니다. 디컴파일을 통해 앱의 구조, 사용된 기술, 그리고 보안 취약점 등을 분석할 수 있습니다.APK 디컴파일에 사용되는 도구apktoolAPK 파일에서 리소스(이미지, XML, 레이아웃 등)와 Smali 코드(안드로이드의 중간 코드)를 추출하는 데 사용되는 오픈소스 도구입니다.jadxSmal..
-
Jetpack Compose 이해하기 (3장) - Compose의 상태 관리와 remember, mutableStateOf안드로이드 2025. 4. 7. 21:17
Jetpack Compose 시리즈의 이전 장에서는 Composable 함수와 Recomposition의 기본 개념에 대해 알아보았습니다.이번 장에서는 Compose에서의 상태(State) 관리와 핵심이 되는 remember, mutableStateOf 에 대해 중점적으로 다뤄보겠습니다. 📌 Compose에서 상태란?Compose에서 상태(State)는 UI가 표시하는 데이터를 의미하며, 상태가 변경되면 Compose는 이를 감지하여 해당 UI를 자동으로 재구성(Recomposition)합니다.이를 통해 최신 상태가 UI에 반영됩니다.🎯 상태 선언 방법Compose에서 상태를 선언하는 일반적인 방법은 remember와 mutableStateOf를 함께 사용하는 것입니다. 이를 통해 상태를 기억하고 ..
-
Jetpack Compose 이해하기 (2장) - Jetpack Compose의 기본 개념과 Composable 함수안드로이드 2025. 4. 4. 20:40
첫 장에서는 선언형 UI와 명령형 UI의 차이점에 대해 알아보았습니다. 이번 포스팅에서는 Jetpack Compose의 기본 개념과 핵심이 되는 Composable 함수에 대해 깊이 알아보겠습니다. 📌 Jetpack Compose란?Jetpack Compose는 안드로이드에서 사용하는 선언형 UI 툴킷으로, 간결하고 직관적인 코드로 UI를 구축할 수 있게 합니다. Compose를 이용하면 UI가 상태 변화에 따라 자동으로 갱신되어 유지보수가 쉽고 생산성이 높아집니다. Compose는 다음과 같은 특징이 있습니다코드로 UI를 작성하는 방식상태(state) 기반의 자동 UI 갱신간결하고 직관적인 코드 작성 가능함수형 프로그래밍 패러다임 사용 📌 Composable 함수란?Compose에서는 UI 요소..
-
Jetpack Compose 이해하기 (1장) - 선언형 UI vs 명령형 UI안드로이드 2025. 4. 3. 00:11
안드로이드 앱 개발에서 Jetpack Compose가 등장하면서 기존의 명령형(Imperative) UI 방식에서 선언형(Declarative) UI 방식으로 패러다임이 전환되었습니다. 이번 글에서는 이 두 가지 접근법의 개념과 차이점을 비교해 보겠습니다. 📌 명령형(Imperative) UI 방식이란?명령형 UI는 화면을 구성할 때 어떻게(how) 만들어야 하는지를 단계별로 명확하게 지정하는 방식입니다. 전통적인 안드로이드 개발에서는 XML과 Kotlin 또는 Java 기반의 View 시스템이 이에 해당합니다. 예를 들어, 특정 버튼 클릭 시 텍스트의 색상을 바꾸려면 다음과 같이 구현합니다.val button = findViewById(R.id.myButton)button.setOnClickList..
-
iOS 개발자가 없는 상황에서 Android 개발자가 iOS 앱을 유지보수한 경험iOS 2025. 3. 31. 22:54
1. 배경2024년 말, 회사에서 갑작스럽게 iOS 개발자가 퇴사하는 일이 발생했다. 기존 iOS 앱의 유지보수는 물론, 신규 기능 추가까지 필요한 상황이었지만, 팀 내에 iOS 경험이 있는 개발자가 없었다. 결국, Android 개발자인 내가 긴급 투입되어 iOS 앱을 유지보수하게 되었다. 처음에는 막막했지만, 다양한 시행착오를 겪으며 iOS 개발을 경험할 수 있었다. 2. iOS 개발 환경 적응하기Xcode와 Swift 익히기Android 개발자는 주로 Android Studio와 Kotlin을 사용하지만, iOS는 Xcode와 Swift를 기본으로 한다. 처음에는 UI 배치 방식부터 프로젝트 구조까지 모든 것이 낯설었다.Xcode: IDE의 단축키부터 빌드 및 디버깅 방식까지 적응하는 데 시간이 필..