목록안드로이드 (21)
성장기록지

Compose Structure컴포즈는 다음과 같은 구조로 이루어져있다.여기서 Compiler와 Runtime은 Compose compiler와 Compose Runtime이다. Compose CompilerCompose를 사용해보신 분이라면 Kotlin 함수에 @Composable 어노테이션을 붙인 함수는Composable 함수로 변환되는 것은 모두가 알고 있는 사실이다.그렇다면 코틀린에서 어노테이션은 기본적으로 어떻게 처리되어질까? kapt나 ksp를 통해 이루어진다.하지만 Compose는 일반적인 어노테이션 프로세서로 처리하지 않고, compose 컴파일러를 활용한다.Compose 컴파일러는 순수 코틀린으로 작성된 코틀린 컴파일러의 플러그인이다.자바로 Compose를 사용할 수 없는 이유이기도 하다..

MVVM 아키텍처 패턴 개요MVVM(Model-View-ViewModel) 패턴은 안드로이드 앱 개발에서 구조적 명확성과 확장성을 위해 널리 사용되는 설계 패턴이다. 이 패턴은 다음 세 가지 구성 요소로 나뉜다.1. Model앱의 데이터 및 비즈니스 로직을 담당한다.데이터 소스와의 상호작용 및 데이터 처리를 수행한다.2. View역할: 사용자가 직접 상호작용하는 UI 부분. 레이아웃 파일(.xml), Activity, Fragment 등이 포함된다.의존성 제거: LiveData나 DataBinding을 사용하여 ViewModel과의 의존성을 최소화한다.주요 기술:LiveData: ViewModel로부터 데이터를 관찰하고 변경 사항을 자동으로 UI에 반영.DataBinding: 레이아웃 파일에 ViewMo..

data binding기존에 viewBinding을 포함한 기술에선UI 컴포넌트는 Activity나 Fragment에서 코드를 통해 속성을 설정해왔지만,data binding을 활용한다면 xml파일 내에서 view에 할당할 데이터를 선언할 수 있고,데이터가 변경되면 view도 갱신되게 된다. 즉 Layout의 Ui 컴포넌트를 데이터에 binding 할 수 있도록 지원하는 라이브러리이다.data binding의 특징뷰바인딩은 데이터를 뷰(ui)로만 전달이 가능하지만,데이터 바인딩을 사용한다면 양방향으로 데이터를 결합시킬 수 있다.레이아웃에서는 주어진 데이터로 UI를 출력하기에, 데이터만 관리하면 되니 역할분리도 제대로 되어진다!이러한 장점을 통해 MVVM 패턴을 적용할 때 사용되어진다. 그렇다면 view ..

컴포저블 내부에서 호이스팅그림과 같은 예시를 보자.전체 화면을 ConverSationScreen이라고 하고, 메시지가 보이는 목록들이 MessagesList,Jump to Bottom이라고 작성되어있는 버튼을 Button,Hi there! 이라고 적혀있는 입력창은 userInput을 의미한다. 그렇다면 요구사항은 다음과 같을 것이다."Jump to bottom을 누르면 MessagesList 가장 아래로 가게 해줘""새로운 메시지를 send해도 가장 아래로 가게 해줘" 그렇다면 계층구조는 어떻게 되어있을까? 그림과 같이 연결되어 있을 것이다. 여기서 우리는 State hoisting을 이용해 재사용성을 높이고 싶다는 생각이 들 것이다.그렇다면 어느 State를 어디까지 호이스팅 해야할까? 공식문서에서 아..

State hoisting?Hoisting은 번역하자면 "끌어올림"이라는 뜻이다.그럼 상태를 끌어올린다는 뜻인데, 상태는 무엇인지, 어떻게 끌어올린다는건지 감이 안 올 수 있을것이다. 그럼 우선 상태에 대해 알아보고 가자. State란?상태를 이해하기 위해선 다음 예시코드를 읽어보자.앱을 실행시킨 후, 이 코드의 텍스트필드에 타이핑을 한다면 어떻게 될까?정답은 아무 일도 일어나지 않는다. 텍스트필드에는 아무런 텍스트가 표시되지 않는다.@Composableprivate fun HelloContent() { Column(modifier = Modifier.padding(16.dp)) { Text( text = "Hello!", modifier = Mo..

프로젝트 진행할 때 적용하였던 클린아키텍쳐를 설명하기 위해선먼저 안드로이드 권장 아키텍쳐를 설명하는것이 좋다고 생각하여서정리하는 글을 작성해보고자 한다. 일반적인 아키텍처 원칙앱 아키텍처는 앱의 부분과 그 각 부분에 필요한 기능 간의 경계를 정의하는 것이다. 따라서 몇가지 특정 원칙을 준수하여야 한다.1. 관심사 분리Activity,Fragment와 같은 UI 기반 클래스에는 UI 및 운영 체제 상호 작용을 처리하는 로직만 포함하여야 하는 것처럼각자의 관심사에 맞게 책임을 가진 코드를 분리하여야 함을 의미한다.Activity와 Fragment는 OS와 애플리케이션을 이어주는 클래스이므로, 메모리부족과 같은 경우에 프로세스 킬이 일어날 수 있다. 따라서 관심사 분리 없이 해당 컴포넌트에 모든 코드를 넣게..

공식문서의 말대로 Jetpack Navigation을 사용한다면 큰 의미가 없겠지만,프래그먼트를 사용하는 모든 앱은 어느 정도 FragmentManager를 사용하므로Fragment Manager가 무엇이고 어떻게 작동하는지 파악하는 것이 중요하다 생각하여 학습을 진행한다.FragmentManager앱 프래그먼트에서 프래그먼트를 추가, 삭제 또는 교체하고 백 스택에 추가하는 등의 작업을 실행하는 클래스이다.Activity, Fragment에서 접근가능하다. FragmentActivity 에서 구현하므로, 해당 및 서브클래스에서는getSupportFragmentManager() 메서드를 통해 FragmentManager에 액세스할 수 있다. 아래와 같은 Fragment Manager가 있다고 하자.Hos..

진행한 프로젝트의 콜백지옥을 해결하기 위해 여러 학습을 진행 중suspend 함수의 내부 구조에 대해 학습하게 되었다. CPS에 대한 이론을 다뤄보겠다.Kotlin 컴파일러가 suspend 키워드를 만났을 때코루틴은 Continuation Passing Style(CPS) 형태로 동작한다.CPS는 호출되는 함수에 Continuation을 전달하고, 각 함수의 작업이 완료되는 대로 전달받은 Continuation을 호출하는 방식을 말한다.그렇다면 Continuation 이란 뭘까? Continuation 인터페이스를 한번 알아보도록 하겠다.Continuation 인터페이스에는 크게 context객체와 resumeWith() 함수가 있다.context는 각 Continuation이 특정 스레드 혹은 스레드 ..

xml을 활용한 개인 프로젝트를 통해 Jetpack Room을 사용해보려고 한다!하지만 유명한 기술이라고 꼭 Room을 사용해야 할까? 다른 대안은 없을까? 하는 마음에사용 근거에 대해 조사하고, 그런 김에 기본적인 사용법도 학습하고자 한다!실제 사용 후 얻는 깨달은 점들도 추후 기록하고자 한다!Jetpack Room이란?Android의 SQLite 데이터베이스를 쉽게 사용할 수 있도록 도와주는 Jetpack 라이브러리이다.SQLite란?SQL(Structured Query Language)을 사용해 데이터를 관리하며,애플리케이션 내에서 데이터베이스 파일을 직접 생성하고 사용할 수 있게하는 라이브러리이다.안드로이드에선 앱을 종료해도 데이터가 남아있게 하고 싶을 때 사용한다.데이터베이스 엔진이다.모든 데이..

Android LifeCycle이란?Android의 앱 구성요소가 생성부터 사용,소멸까지의 일련의 과정을 말한다.대표적으로 Activity, Fragment, Service 등이 생명주기를 가지고있다. Activity LifeCycle생명주기를 살펴보기전에 자주 나오는 용어를 정리해보고자 한다.foreground는 가장 위에 있는 상태(사용자에게 보여지는 상태) 이고,background는 반대로 가장 아래에 있는 상태를 의미한다. 이제 각각의 콜백에 대해서 설명해보자.onCreate()액티비티가 생성될 때 호출된다. 단 한번만 호출되기 때문에, 필요한 변수를 초기화하거나,setOnClickListener , 뷰모델 등 초기화 작업에 적합하다. onStart() foreground가 될때마다 호출이 되어..