compose에서 MainActivity는 ComponentActivity의 서브클래스로 선언해야 한다. compose 도입 이전의 안드로이드 개발 방식의 결과물로 메인액티비티는 onCreate() 형태의 단일 메서드를 구현한다. 여기서 onCreate()는 compo
companion object 코틀린 클래스는 하나의 컴패니언 객체를 포함할 수 있다. 컴패니언 객체의 프로퍼티에 클래스의 인스턴스를 만들지 않고도 접근할 수 있다. > 상태(state) 컴포즈와 같은 선언적 언어에서 일반적으로 상태란 '시간에 따라 변경될 수 있
Text 컴포저블의 글꼴 크기나 굵기는 위와 같이 지정할 수 있다.대부분의 내장 컴포저블들은 선택적인 모디파이어 파라미터를 받으며, 이를 이용해 컴포저블의 다른 항목들을 설정할 수 있다.일반적으로 특정한 컴포저블과 관련된 파라미터와 달리(글꼴 설정은 Column 컴포넌
Row, Column 컴포저블은 기본적으로 내부의 자식 요소 그룹들을 콘텐츠 영역의 가장 왼쪽 위 모서리를 기준으로 정렬한다. 한 화면에 여러개의 Row, Column 컴포저블이 존재한다면 여러 컴포저블의 모디파이어들에 따라 배치가 달라진다. Row의 수직 방향 정렬

Box 레이아웃은 자식들을 위로 쌓아 올린다. (스택, 기기 화면에서 볼 때 화면의 앞쪽으로 쌓아 올린다). 먼저 호출한 자식이 스택의 가장 아래에 위치한다. 파라미터의 이름은 contentAlignment이다.clip() 모디파이어를 이용하면 컴포저블을 특정한 형태로

앞의 예시에서 Box 레이아웃을 ColorBox 요소를 자신의 콘텐츠 영역의 왼쪽 위 모서리에 배치했다. 이는 정렬 파라미터 또는 다른 모디파이어를 전달하지 않았을 때 Box 레이아웃의 자식의 기본 위치다.간단한 커스텀 레이아웃 모디파이어를 만든다. 이 모디파이어를 C

대부분의 커스텀 레이아웃 선언은 같은 표준 구조로 시작한다.다음은 자식의 레이아웃 프로퍼티를 변경하지 않으며, 사용자 커스텀 레이아웃을 구성하는 템플릿 역할의 레이아웃의 선언 코드이다.이 함수는 모디파이어 하나와 Slot API를 통해 표시되는 콘텐츠를 받는다.함수는

constraintLayout을 완전히 이해하기 위해서는 다음의 개념을 익혀야 한다.constraint: 한 컴포저블의 정렬과 위치를 조정함에 있어 다른 컴포저블들, ConstraintLayout 부모를 포함한 관계, 그리고 가이드라인과 배리어라 불리는 특별한 요소들을

ConstraintLayout 호출하기 참조 만들기 제약이 존재하지 않으면 ConstraintLayout의 컴포저블 자식은 영역의 왼쪽 위 모서리에 배치된다. 다음은 참조를 생성하는 방법이다. 또는 createRefs()를 호출해 한 번에 여러 참조를 생성할 수도

컴포즈에서는 종종 부모 컴포저블이 재구성 과정에서 자식을 측정하기 전부터 그 크기 정보를 알아야 하는 경우가 발생한다. 예를 들어, 폭이 가장 넓은 자식과 일치하도록 Column의 폭을 조절하기 위해 자식의 폭을 알아야 할 수 있다. 부모는 자식의 크기를 측정할 수 없
안드로이드 애플리케이션이 처음 시작될 때 런타임 시스템은 단일 스레드를 생성하며, 기본적으로 그 안에서 모든 애플리케이션 컴포넌트를 시행한다. 이 스레드는 일반적으로 메인 스레드라 불린다. 메인 스레드의 주요한 역할은 사용자 인터페이스 관점에서의 이벤트 핸들링과 상호작

Row나 Column 컴포넌트는 자식 컴포저블을 수직 및 수평 리스트로 제공할 목적으로 이용된다. 그러나 데이터가 매우 많은 경우 Row, Column을 이용해 렌더링하는 것은 성능 저하를 일으킨다. Compose는 수많은 아이템을 포함하는 리스트를 다룰 수 있는 La

Column 기반 리스트 만들기

Row, Column을 활용하여 리스트를 만드는 것이 가능하나, 대부분의 상황에서 사용하는 것은 LazyRow, LazyColumn이다. 긴 리스트를 효율적으로 표시할 수 있고 스티키 헤더, 스크롤 위치 변경에 대응하는 등 다양한 기능을 제공하기 때문이다.차량의 제조사

앞에서 구현한 프로젝트에 스티키 헤더 지원을 추가하고, 스크롤 식별을 이용해 사용자가 지정한 거리 이상으로 리스트를 스크롤했을 때, "맨 처음으로 이동하기" 버튼이 표시되도록 확장한다.리스트 아이템을 그룹핑했으므로 MainScreen의 LazyColumn의 코드를 수정
현재 구글은 동일한 액티비티 안에서 다른 화면을 콘텐츠로 로드하는 단일 액티비티 앱을 권고하고 있다.모던 아키텍처 가이드라인 또한 앱의 다양한 책임 부분을 완전히 별도의 모듈로 나누는 것을 권장한다. 이 접근 방식의 핵심 중 하나가 ViewModel 컴포넌트다.View

섭씨와 화씨 온도를 변환하는 간단한 앱을 구현한다. 온도를 입력하고 버튼을 클릭하면, 변환된 온도가 Text 컴포넌트에 표시된다. Switch 컴포넌트를 이용해 입력되는 온도가 섭씨 온도인지 화씨 온도인지 선택한다. 현재 스위치 설정, 변환 결과, 변환 로직은 View

SQLite는 안드로이드 운영체제에서 번들로 제공하는 데이터베이스 관리 시스템이다. Room 퍼시스턴스 라이브러리는 안드로이드 아키텍처 컴포넌트에 포함되어 있으며, 안드로이드 아키텍처 가이드라인을 준수하면서 안드로이드 앱에 데이터베이스 저장소 지원을 쉽게 추가하기 위해

이 프로젝트는 기본적인 인벤토리 앱으로 제품의 이름과 수량을 저장한다. 앱은 데이터베이스 항목 추가, 삭제, 검색할 수 있으며 데이터베이스에 현재 저장된 모든 제품을 스크롤할 수 있는 리스트로 표시한다. 이 제품 리스트는 데이터베이스 항목이 추가 또는 삭제되면 자동으로
컴포즈 안에서의 내비게이션에 관해 살펴본다. 경로, 내비게이션 그래프, 내비게이션 백 스택, 인자 전달, NavHostController와 NavHost 클래스를 학습한다. 홈 화면을 포함해 앱을 구성하는 각 화면은 목적지라 불리며, 일반적으로 하나의 컴포저블 또는 액
이 프로젝트는 3개의 목적지 화면(홈, 웰컴, 프로필)으로 구성된다. 홈 화면은 하나의 텍스트 필드를 갖고 있으며 사용자가 이름을 입력한다. 버튼을 클릭하면 웰컴 화면으로 이동하면서 사용자의 이름을 인수로 전달하며, 이 이름은 웰컴 메시지에 표시된다. 웰컴 화면도 하나
이 프로젝트에서는 BottomNavigation 컴포넌트를 이용해 내비게이션 바를 액티비티에 추가하고 Scaffold 컴포넌트를 간단히 이용해 머티리얼 테마 가이드라인을 준수하는 표준 화면 레이아웃을 만들어본다.완성된 프로젝트에는 세개의 화면이 존재하고 하단 내비게이션
제스처는 사용자와 애플리케이션 사이의 커뮤니케이션 형태로 구현할 수 있다. 스와이프 모션으로 페이지를 넘기거나, 두 손가락으로 이미지를 확대/축소하는 등의 제스처는 애플리케이션과 인터랙션하는 전형적인 방법이다.컴포즈에서는 여러 인스턴스를 통해 두 가지 제스처 감지 방법

컴포즈에서 스와이프 모션은 컴포넌트를 한 앵커에서 다른 앵커로 옮긴다. 앵커는 스와이프 축을 따라 화면에 존재하는 고정된 위치를 의미한다. 두 앵커 사이의 한 지점은 임계점으로 선언된다. swipeable() 모디파이어를 적용해 스와이프 제스처를 감지할 수 있다. sw

코틀린에서 suspend 함수는 결과를 반환하지 않거나 단일 값을 반환하는 태스크를 수행하는 데만 유용하다는 단점이 있다. 코틀린 플로는 이를 보완하여 코루틴 기반 태스크로부터 얻은 순차적인 결과 스트림을 반환하는 기능을 제공한다. 플로 이해하기 플로는 코루틴 기반의