Android/공부

컴포즈 - 1장 컴포즈 앱 첫 빌드

끄공 2025. 1. 19. 17:55

Row() 함수는 modifier라는 매개변수를 받는다. modifier는 젯팩 컴포즈의 핵심 기술로 컴포저블 함수의 외형과 행위에 영향을 준다. 3장에서 자세히 다룬다.

 

Recomposition : 컴포저블 함수를 다시 그리는 것. MutableState 타입의 값을 변경하면 컴포저블 함수는 다시 그려지거나 다시 채색된다.

 

Box()는 한 개 이상의 자식 컴포저블 함수를 포함할 수 있다.

 

remember, mutableStateOf는 모두 상태를 생성하고 관리하는 데 매우 중요한 역할을 한다.

 

컴포저블 함수가 상태를 갖는다면 상태가 변경될 경우 컴포저블 함수는 재구성된다. 

 

mutableStatesStateOf()를 사용해 상태를 생성하고 remember를 사용해 상태를 기억한다. 그리고 상태를 다른 컴포저블 함수로 전달하는데 이를 상태 호이스팅(state hoisting)이라 부른다.

 

@PreviewParameter를 사용하면 미리 보기에만 영향을 주면서 컴포저블 함수에 값을 전달할 수 있다. 다만 이 기능은 새로운 클래스를 작성해야 하므로 조금 장황해진다.

class HelloProvider : PreviewParameterProvider<String> {
	override val values: Sequence<String>
    	get() = listOf("PreviewParameterProvider").asSequence()
}

@Composable
@Preview
fun AltGreeting2(@PreviewParameter(HelloProvider::class) name: String) {}

 

기본적으로 프리뷰 면적은 자동으로 선택된다. 면적을 명시적으로 설정하고자 한다면 heightDp와 widthDp를 전달할 수 있다.

@Composable
@Preview(widthDp = 100, heightDp = 100)
fun Welcome() {
	Text(
    	text = stringResource(id = R.string.welcome),
        style = MaterialTheme.typography.subtitle1
    )
}

// 모두 밀도 독립 픽셀로 처리되기 때문에 .dp를 추가할 필요가 없다.

 

컴포저블 함수의 개수에 따라 미리 보기 창이 다소 혼란스러워 보일 수 있다. 이러면 group 매개변수를 추가해 컴포저블 함수를 다른 그룹에 추가하면 된다. 그러면 모든 컴포저블 함수를 확인하거나 특정 그룹에 속한 함수만 확인할 수 있다.

@Preview(group = "my-group-1")

 

미리 보기를 이미지로 추출 가능하다.

 

액티비티는 manifest 파일에 정의해야 한다. 이 내용은 컴포즈 앱에서도 여전히 유효하다. 컴포저블 함수를 보여주고자 하는 액티비티는 예전처럼 레이아웃 파일을 inflate하는 방식으로 구성된다. 

 

컴포저블 함수를 렌더링하고자 하는 액티비티는 반드시 ComponentActivity나 ComponentActivity를 직접 또는 간접적으로 부모 클래스로 갖는 다른 클래스를 상속해야만 한다. 

 

컴포즈 앱은 setContent()를 호출하는 반면 뷰 기반의 앱은 setContentView()를 호출하면서 레이아웃 아이디(R.layout.activity_main) 또는 루트 뷰 자체를 전달한다는 중요한 차이점이 있다. 

 

컴포저블 함수는 클래스의 일부가 될 필요가 없다. 가능하다면 컴포저블 함수는 최상위 함수로 구현해야 한다. 젯팩 컴포즈는 android.content.Context에 접근할 수 있는 대체 수단을 제공한다. 이미 getString() 메서드를 대체하는 stringResource() 컴포저블 함수를 살펴봤다. (48pg)

 

젯팩 컴포즈는 코틀린에 크게 의존한다. 이는 앱 프로젝트가 반드시 코틀린을 사용하도록 설정돼야만 한다는 것을 의미한다. 그렇다고 자바를 전혀 사용할 수 없다는 것은 아니다. 사실 컴포저블 함수가 코틀린으로 작성돼 있기만 하다면 프로젝트에서 코틀린과 자바를 손쉽게 혼용할 수 있다.