분류 전체보기
-
[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의 단축키부터 빌드 및 디버깅 방식까지 적응하는 데 시간이 필..
-
Kotlin Flow에서의 Debounce와 Throttle 기법안드로이드 2025. 3. 25. 22:25
Kotlin에서는 Flow를 활용하여 비동기적으로 이벤트를 처리할 수 있으며, 이벤트가 지나치게 자주 발생하는 경우 이를 제어하는 다양한 기법이 필요합니다. Debounce와 Throttle은 이러한 상황에서 유용하게 사용되는 기법으로, 불필요한 작업을 줄이고 성능을 최적화하는 데 큰 도움이 됩니다. 본 글에서는 이 두 기법의 개념과 이를 Kotlin Flow에서 어떻게 적용할 수 있는지에 대해 살펴보겠습니다. 1. Debounce와 Throttle 기법이란?DebounceDebounce는 연속된 이벤트 중 마지막 이벤트만 실행되도록 처리하는 기법입니다.일정 시간 동안 추가적인 이벤트가 발생하지 않으면, 그때서야 마지막 이벤트를 처리하게 됩니다.즉, 빠르게 발생하는 여러 이벤트 중에서 마지막 이벤트를 처..
-
[Kotlin] invoke 함수Kotlin 2025. 1. 15. 22:15
Kotlin의 invoke()는 무엇인가?코틀린(Kotlin)에는 이름 없이 호출할 수 있는 특별한 함수, 정확히는 연산자인 invoke()가 존재합니다. 이 함수는 객체를 마치 함수처럼 사용할 수 있도록 만들어 주는 강력한 기능을 제공합니다. 아래의 예제를 통해 invoke()의 동작을 살펴보겠습니다.class Example { operator fun invoke(str: String): String { return str.toUpperCase() }}위 코드는 Example 클래스에 invoke() 연산자를 정의한 예제입니다. 이 invoke()는 일반 메서드처럼 호출할 수 있습니다:val example = Example()println(example.invoke("hello"..