반응형

Foundation/Android 10

[Android] LiveData setValue(), postValue() deep dive

개요 LiveData는 수명 주기를 인식하는 Observable data holder class 이다. LiveData는 몇 가지 특성을 갖고 있다. 데이터를 보유할 수 있다. 또한, 모든 유형의 데이터에 사용할 수 있는 Wrapper class이다. Observable 하다. LiveData 객체에서 보유한 데이터가 변경되면 관찰자에게 알림이 제공된다. 수명 주기를 인식한다. LiveData에 관찰자를 연결하면, 관찰자는 LifecycleOwner(일반적으로 Activity 또는 Fragment)와 연결된다. LiveData는 STARTED, RESUMED와 같은 활성 수명 주기 상태인 관찰자만 업데이트 한다. LiveData 객체의 setValue(), postValue() postValue() 작업..

Foundation/Android 2024.02.11

[Android] ViewModel이 Configuration Change에서도 유지되는 이유

주의 : 글이 깁니다. 티스토리는 코드 가독성이 매우 떨어집니다. 편집기에 복사해서 보시는 걸 추천합니다. 개요 안드로이드를 개발하는 방법이 다양해지면서 .xml로 앱을 만들어 봤고, Compose를 사용해서 앱을 만들고도 있습니다. View를 그리는 방법과 ViewModel에서 데이터를 홀드하는 방법이 다양해졌는데, 제 생각에 그 중에서 ViewModel이 유일하게 기존에 사용법과 동일한 사용법으로 안드로이드 개발에서 사용되고 있다고 생각됩니다. 물론 구글에서 동일하게 사용할 수 있도록 작업을 해주셨기에 가능한 일이겠지만, 이런 ViewModel을 조금 더 자세히 알고 싶어졌습니다. ViewModel의 Lifecycle과 흔히 Configuration Change가 발생하더라도 데이터를 유지할 수 있기..

Foundation/Android 2023.12.04

[Android] What is Gradle?

What is Gradle? Gradle은 거의 모든 유형의 소프트웨어를 빌드할 수 있을 정도로 유연한 오픈 소스 빌드 자동화 도구이다.Gradle은 무엇을 구축하려고 하는지 또는 어떻게 구축해야 하는지에 대해 몇 가지 가정을 한다. 이러한 가정이 Gradle을 특히 유연하게 만든다. 안드로이드 스튜디오는 빌드 자동화 도구로 Gradle을 사용한다. 안드로이드 스튜디오에서 실제 빌드는 Gradle이 한다. Gradle은 다음과 같은 일을 한다. Compile : 리소스 및 소스 코드를 컴파일한다. (In Android, Kotlin, Java 코드 → 바이트 코드) Packaging : 코드를 패키징해서 aab, apk 파일로 만들어 준다. Test : 테스트 환경을 구축하고 지원한다. Deploy & ..

Foundation/Android 2023.04.19

[Android] Jetpack Compose 개념

Introduce Jetpack Compose는 Android를 위한 현대적인 선언형 UI 도구 키트이다. 더 적은 수의 코드, 강력한 도구, 직관적인 Kotlin API로 Android에서의 UI 개발을 간소화하고 가속화하여 앱에 생동감을 더해준다. 코드 감소 직관적 빠른 개발 과정 강력한 성능 간단한 Composable 함수 Compose를 사용하면 데이터를 받아서 UI 요소를 내보내는 Composable function 집합을 정의하여 사용자 인터페이스를 빌드할 수 있다. @Composable 주석이 있어야 함수가 데이터를 UI로 변환하기 위한 함수라는 것을 Compose 컴파일러에게 알릴 수 있다. 함수는 데이터를 받는다. 매개변수가 있을 수 있으며 이를 통해 앱 로직이 UI를 형성할 수 있다. ..

Foundation/Android 2023.01.29

[Android] Hilt AndroidEntryPoint Annotation

Introduce Application에서 멤버 주입을 사용 가능으로 설정한 후, @AndroidEntryPoint Annotation을 사용하여 다른 Android class에서 멤버 주입을 사용 가능으로 설정할 수 있다. 다음 유형에서 @AndroidEntryPoint를 사용할 수 있다. Activity Fragment View Service BroadcastReceiver @AndroidEntryPoint class MyActivity : MyBaseActivity() { // Bindings in SingletonComponent or ActivityComponent @Inject lateinit var bar: Bar override fun onCreate(savedInstanceState: B..

Foundation/Android 2022.11.20

[Android] 종속 항목 삽입(Dependency Injection)이란?

Introduce 종속 항목 삽입을 구현하면 다음과 같은 이점을 누릴 수 있다. 코드 재사용 가능 리팩터링 편의성 테스트 편의성 종속성 항목 삽입이란? 클래스에는 흔히 다른 클래스 참조가 필요하다. 예를 들어 Car 클래스는 Engine 클래스 참조가 필요할 수 있다. 이처럼 필요한 클래스를 종속 항목이라고 하며, 이 예에서 Car 클래스가 실행되기 위해서는 Engine 클래스의 인스턴스가 있어야 한다. 클래스가 필요한 객체를 얻는 세 가지 방법은 다음과 같다. 클래스가 필요한 종속 항목을 구성한다. 위의 예에서 Car는 자체 Engine인스턴스를 생성하여 초기화한다. 다른 곳에서 객체를 가져온다. Context Getter 및 getSystemService()와 같은 일부 Android API는 이러한..

Foundation/Android 2022.11.19

[Android] Fragment Manager에서 replace()와 add()의 차이점

안녕하세요 골드입니다. 오늘은 Fragment에서 사용하는 함수 add()와 replace()에 대해 글을 작성하겠습니다. 면접에서 이 부분을 애매하게 알면서 대답을 못했습니다. 간단하게 알고 있었던 부분은 add() 단순 추가, replace()는 기존 fragment를 remove()하고 새롭게 호출된 fragment로 대체한다는 점이었다. 이미지로 보면 이렇다. add()는 기존 fragment 위에 덮어 쓰이고 기존 fragment에 대한 다른 함수 호출을 하지 않기 때문에 단순히 fragment가 onAttach() - onResume()까지 호출되면서 쌓이게 된다. Fragment A : onAttach() - onResume() : Fragment B 밑에서 실행중 Fragment B : o..

Foundation/Android 2022.02.24

[Android] Platform Architecture (플랫폼 아키텍처)

안녕하세요 골드입니다. 오늘은 안드로이드 플랫폼 아키텍처에 관해서 간단하게 살펴보도록 하겠습니다. 안드로이드는 다양한 기기 환경에서 작동할 수 있도록 제작된 Linux 기반 오픈소스 소프트웨어 스택입니다. 안드로이드 플랫폼은 몇 개의 계층으로 나누어져 있습니다. 제일 위에 시스템 앱(System Apps)이 우리가 사용하는 애플리케이션입니다. - 시스템 애플리케이션(System Apps) 시스템 앱은 안드로이드와 함께 제공되는 기본 구성 애플리케이션입니다. 달력, 시계, 주소록, 카메라 등은 일반적인 안드로이드에 설치되어 있는 앱입니다. 이러한 앱이 시스템 앱입니다. 시스템 앱과 사용자가 설치하는 앱 사이에 구별되는 특징은 없습니다. 따라서 삼성 같은 경우 삼성 UI를 적용할 수 있고 마찬가지로 타사에서..

Foundation/Android 2021.08.16

[Android] 앱 기본 구성 요소 (Application 4대 요소)

안녕하세요 골드입니다. 오늘은 안드로이드 애플리케이션을 구성하는 기본 4대 요소에 대해서 글을 쓰도록 하겠습니다. 1. Android Application Basic 먼저 안드로이드는 기본적으로 앱 자기 자신의 작업을 수행하기 위해 필요한 구성 요소에 대한 액세스 권한을 갖고 그 이상은 허용되지 않습니다. 이런 방식을 최소 권한의 원리라고 이야기합니다. 필요한 구성 요소 외에 다른 요소들에 대한 액세스를 갖고 있지 않고 알고 싶거나 궁금해하지 않습니다. 안드로이드 운영체제는 Linux 기반입니다. 멀티유저 Linux 시스템으로, 각 애플리케이션은 하나의 사용자와 같습니다. 그러므로 시스템은 각 애플리케이션에 고유한 ID를 부여합니다. 시스템 안에 모든 기능들에 권한을 부여하고 이 기능들에 대한 액세스를 ..

Foundation/Android 2021.08.15

[Android] Activity와 Fragment 비교

안녕하세요 골드입니다. 요즘 날씨가 많이 덥습니다. 안드로이드에서 View를 보여주기 위한 Container역할을 하는 두 개의 Class가 있습니다. Activity와 Fragment입니다. 안드로이드에서 가장 중요한 개념 중 하나인 만큼 자세히 알아보겠습니다. 이 글은 Android 공식 문서를 바탕으로 작성하였습니다. 1. Activity 소개 Activity는 main() 메서드를 사용하여 앱을 실행하는 프로그래밍 패러다임과 다른 안드로이드 시스템의 특수성에 의하여 생긴 개념입니다. 모바일 앱은 데스크톱과 다르게 항상 같은 위치에서 시작되는 것이 아닙니다. 예를 들어, 이메일 앱을 열면 이메일 보내기 화면으로 바로 이동하거나 할 수 있습니다. 즉, 앱이 다른 앱을 호출할 때 앱의 전체를 호출하는 ..

Foundation/Android 2021.07.30