본문 바로가기

전체 글71

[Android/Kotlin] 안드로이드에서 Fragment 전환 시 비동기 처리 문제 해결: OnBackStackChangedListener 사용법 안드로이드 앱 개발에서 Fragment 전환 시 발생하는 비동기 처리 문제를 해결하기 위해 FragmentManager.OnBackStackChangedListener를 사용하는 방법을 소개합니다. 이 글에서는 supportFragmentManager.popBackStack()의 비동기적 특성으로 인해 현재 Fragment를 정확하게 가져오지 못하는 문제를 해결하는 과정을 설명합니다.1. 서론안드로이드 앱 개발 시, 뒤로가기 버튼을 커스터마이징하여 사용자의 편의성을 높이고자 할 때가 있습니다. 특히 Fragment 전환 시 발생하는 비동기 처리 문제를 해결하는 것이 중요합니다. 이번 글에서는 이러한 문제를 해결하기 위해 FragmentManager.OnBackStackChangedListener를 어떻게.. 2024. 6. 27.
[Kotlin] Kotlin의 apply 문법 이해하기 코틀린(Kotlin)은 간결하고 효율적인 코드를 작성하기 위해 다양한 유용한 기능을 제공합니다. 그중 하나가 바로 apply 함수입니다. 이 블로그에서는 apply 함수의 문법과 사용법에 대해 알아보겠습니다.apply 함수란?apply 함수는 코틀린의 스코프 함수 중 하나로, 객체의 초기화를 간결하고 명확하게 할 수 있게 해줍니다. 객체를 생성하고 나서, 해당 객체의 여러 속성을 설정해야 할 때 유용하게 사용됩니다.apply 함수의 문법apply 함수는 객체의 초기화 블록을 포함하여 객체 자체를 반환합니다. 이는 초기화 코드를 간결하게 작성하고, 중복을 줄이는 데 도움이 됩니다.val person = Person().apply { name = "John Doe" age = 30 addre.. 2024. 6. 24.
[Android] 키패드가 올라오면서 UI 요소가 같이 올라오는 현상 해결하기 android:windowSoftInputMode="adjustPan"안드로이드 앱 개발을 하다 보면, 사용자가 텍스트 입력을 위해 키패드를 열 때 하단의 네비게이션 바나 특정 UI 요소들이 함께 올라오는 불편한 현상을 마주할 때가 있습니다. 특히, 이러한 문제는 하단에 고정된 네비게이션 바를 사용할 때 자주 발생합니다. 이번 포스팅에서는 이 문제를 간단히 해결하는 방법을 공유하고자 합니다.문제 상황아래와 같은 레이아웃을 가진 앱이 있다고 가정해봅시다. 하단에 BottomNavigationView가 고정되어 있고, 사용자가 텍스트 입력을 위해 키패드를 열 때 이 네비게이션 바가 같이 올라오는 현상이 발생합니다.   해결 방법이 문제를 해결하기 위해서는 AndroidManifest.xml 파일.. 2024. 6. 20.
[Kotlin] 코틀린의 Unit 타입: 무엇이고 어떻게 사용하는가? 코틀린을 사용하다 보면 Unit이라는 타입을 접하게 됩니다. 자바의 void와 유사하지만, 코틀린에서는 조금 더 유연하게 사용할 수 있습니다. Unit이란 무엇인가?Unit은 코틀린에서 반환 값이 없음을 나타내는 특수한 타입입니다. 자바의 void와 유사하지만, 코틀린에서는 Unit도 실제로 객체로 존재하며, 단 하나의 인스턴스만 가지고 있습니다. 이 인스턴스의 이름도 Unit입니다.fun exampleFunction(): Unit { println("This function returns Unit")}exampleFunction 함수는 Unit을 반환합니다. 물론, 반환 타입을 명시하지 않아도 코틀린 컴파일러는 자동으로 Unit을 반환 타입으로 간주합니다. Unit의 실제 사용 예Unit은 주로 .. 2024. 6. 14.
[Terminal - Mac]안드로이드 에뮬레이터 실행 오류 해결하기 안드로이드 에뮬레이터 실행 중 발생하는 "Pixel 7 API 34 is already running" 오류를 해결하는 방법에 대해 알아보겠습니다.이 오류는 주로 에뮬레이터의 잠금 파일(lock file) 문제로 발생하며, 이를 해결하기 위해 터미널 명령어를 사용하게 됩니다. 오류 메시지에뮬레이터를 실행할 때 다음과 같은 오류 메시지를 볼 수 있습니다.오류 원인이 오류는 에뮬레이터가 이미 실행 중이거나, 이전에 실행된 에뮬레이터의 잠금 파일이 제대로 삭제되지 않은 경우에 발생합니다. 잠금 파일은 에뮬레이터가 실행 중임을 나타내며, 이를 수동으로 삭제하면 문제가 해결될 수 있습니다. 해결 방법1. 터미널 열기 먼저 터미널을 엽니다. macOS에서는 터미널 앱을 사용하고, Windows에서는 명령 프롬프트나.. 2024. 6. 13.
[Android] 안드로이드 ConstraintLayout에서 1:1 비율로 뷰 설정하기 ConstraintLayout에서 layout_constraintDimensionRatio 사용법 ConstraintLayout은 매우 유연하고 강력한 레이아웃 시스템으로, layout_constraintDimensionRatio 속성을 사용하여 너비와 높이의 비율을 쉽게 설정할 수 있습니다.예를 들어, 너비와 높이를 1:1 비율로 설정하고 싶은 경우 다음과 같이 코드를 작성할 수 있습니다.  여기서 android:layout_width와 android:layout_height를 둘 다 0dp로 설정하고, app:layout_constraintDimensionRatio 속성을 1:1로 설정합니다.이 속성은 너비와 높이의 비율을 지정하는 것으로, 1:1은 너비와 높이가 동일하게 설정된다.. 2024. 6. 10.
[Android/Kotlin] 코루틴: Kotlin에서 비동기 프로그래밍을 간소화하는 방법 코루틴(Coroutine)은 비동기 프로그래밍을 단순화하기 위해 코틀린(Kotlin)에서 제공하는 기능입니다.비동기 프로그래밍은 여러 작업을 동시에 진행할 수 있게 해주어, 애플리케이션의 효율성과 반응성을 향상시킵니다.하지만, 전통적인 방법으로 구현할 경우 코드가 복잡해지고, 에러 처리가 어려워지는 등의 문제가 발생할 수 있습니다. 코루틴은 이러한 문제를 해결하기 위해 등장했습니다.코루틴의 주요 특징은 다음과 같습니다.경량성(Lightweight): 코루틴을 사용하면 많은 수의 동시 작업을 생성할 수 있으며, 이는 전통적인 스레드를 사용하는 것보다 훨씬 적은 리소스를 사용합니다.비동기 코드의 단순화(Simplifying asynchronous code): 코루틴을 사용하면 비동기 코드를 동기 코드처럼 읽.. 2024. 5. 29.
[Kotlin] Kotlin에서 class와 object의 차이점 및 활용 방안: 싱글톤 패턴과 유연성 비교 Kotlin에서는 class와 object 키워드를 사용하여 클래스를 정의할 수 있으며, 이 두 방식은 중요한 차이점을 가지고 있습니다. 특히, object 키워드는 싱글톤 패턴(Singleton Pattern)을 구현하기 위해 사용됩니다. 싱글톤 패턴을 적용하면 애플리케이션 전체에서 단 하나의 인스턴스만 존재하게 되며, 이는 여러 면에서 유용합니다. 싱글톤 패턴과 objectobject로 선언된 클래스는 애플리케이션 전체에서 오직 하나의 인스턴스만을 가집니다. 이는 특히 상태를 공유하지 않는 유틸리티 메서드들이나 전역적으로 접근해야 하는 자원을 관리할 때 유용합니다. 예를 들어, 네트워크 호출과 같은 작업을 수행하는 NetworkUtils 클래스가 있다고 가정해봅시다. 이 클래스를 object로 선언함.. 2024. 5. 28.
[Android] Hilt를 활용한 Android 의존성 주입: @HiltAndroidApp으로 애플리케이션 컨테이너 설정하기 Hilt와 관련된 설명에서 "컨테이너"라는 용어는 종속 항목(의존성)을 관리하고 저장하는 구조를 의미합니다. 쉽게 말해, Hilt를 사용하는 Android 애플리케이션에서 컨테이너는 앱의 다양한 부분(예: 액티비티, 프래그먼트, 서비스 등)이 필요로 하는 객체들을 생성하고, 저장하며, 필요한 곳에 제공하는 역할을 합니다.Hilt 컨테이너의 역할객체 생성: 필요한 객체를 생성하는 공장 같은 역할을 합니다.객체 저장: 생성된 객체를 저장하여, 같은 객체를 여러 곳에서 재사용할 수 있도록 합니다.객체 제공: 저장된 객체를 필요한 곳에 자동으로 제공합니다.@HiltAndroidApp 주석의 역할@HiltAndroidApp은 애플리케이션의 시작점에 붙는 주석으로, Hilt를 사용하기 위한 초기 설정을 의미합니다... 2024. 5. 21.
[Android/Kotlin] 안드로이드 네비게이션: NavController 찾기의 두 가지 방법 비교 안드로이드 개발 시 자주 마주치는 네비게이션 컴포넌트, 특히 NavController를 찾는 두 가지 방법에 대해 알아보고, 각각의 장단점을 비교해보는 시간을 가지려고 합니다.안드로이드의 네비게이션 컴포넌트는 앱 내에서 화면 이동(네비게이션)을 용이하게 관리해 주는 매우 중요한 요소입니다. 그렇다면 NavController를 어떻게 찾을 수 있을까요? 아래에서 자세히 알아보겠습니다. 방법 1: 공식 문서 방식공식 문서는 Activity에서 NavHostFragment를 찾고, 그 안에 있는 NavController를 사용하는 방법을 권장합니다.val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as.. 2024. 5. 18.
[Android/Kotlin] BaseFragment를 ViewBinding과 DataBinding 방식으로 생성하는 방법 ViewBinding으로 BaseFragment 생성하기ViewBinding은 UI 컴포넌트에 대한 참조를 더 쉽게 관리할 수 있게 해주는 기능입니다. ViewBinding을 사용함으로써 null 체크나 findViewById 호출의 필요성을 줄일 수 있습니다.abstract class BaseFragmentVB(private val bindingFactory: (LayoutInflater) -> T) : Fragment() { private var _binding: T? = null protected val binding get() = _binding!! override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,.. 2024. 5. 13.
[Android] 안드로이드의 Instrumentation 클래스 소개 Instrumentation 클래스는 안드로이드 애플리케이션에서 앱의 동작을 모니터링하고 제어할 수 있게 해주는 강력한 클래스입니다. 이 클래스는 주로 테스팅과 앱 내부의 이벤트 시뮬레이션에 사용됩니다. 안드로이드 테스팅 프레임워크의 일부로서, Instrumentation 클래스는 애플리케이션의 생명주기 이벤트를 관찰하고, 키 입력이나 터치 이벤트 같은 사용자 인터랙션을 시뮬레이션하며, 다양한 종류의 테스트를 수행하는 데 필수적인 기능을 제공합니다. 주요 기능 및 사용법애플리케이션 생명주기 관리: Instrumentation 클래스를 사용하여 액티비티의 시작, 정지와 같은 생명주기 이벤트를 직접 호출할 수 있습니다. 이를 통해 테스트 중에 애플리케이션의 특정 상태를 재현할 수 있습니다.사용자 이벤트 시뮬.. 2024. 5. 7.