2022. 9. 28. 17:48ㆍandroid
Android Compose란 무엇인가?
Jetpack Compose는 Android에서 UI를 만들기 위해 새롭게 선보인 기능입니다.
Swift와 같이 선언형 UI로 View를 그립니다.
선언형 UI 란 UI의 변화가 있을 때 변화된 UI 자체를 새로 만들어 View로 보여주는 방식입니다.
이게 무슨 말이냐.
기존에는 UI를 만들 때 명령을 내려서 만들었습니다.
버튼 클릭으로 인해 View에 변화가 생기는 일이 발생한다면
버튼에 연결된 View와 View에 연결된 객체를 갱신하도록 전부 바꿔주고 관리하고 연결하고
과정을 싹 다 했었습니다.
그런데 선언형 UI는 버튼 클릭으로 객체가 변경되고 그에 따라 View가 변경될 때
변경되는 값만 신경 씁니다.
값이 변경되면 아예 새로 싹 다 그리도록 만들었습니다.
다시 그리면 너무 비용이 많이 들지 않을까??
그건 프레임워크에서 최적화를 해두었다고 합니다.
그러니까 만들어서 쓰게 하지 않았을까 생각도 합니다
굳이 그 똑똑이들이 성능 안 좋은걸 사람들에게 쓰라고 말하진 않을 테니까요
아래에 코드를 한번 보면
@Composable
fun TextField(
modifier: Modifier,
focusRequester: FocusRequester,
focusChange: (FocusState) -> Unit,
text: String,
onValueChange: (String) -> Unit,
color: Int,
hint: Boolean,
hintText: Int,
singleLine: Boolean
) {
val textColor = if (color == Color(0xFF1B1B1A).toArgb()) Color.White else Color.Gray
Box(
modifier = modifier
) {
BasicTextField(
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester)
.onFocusChanged { focusChange(it) },
value = text,
onValueChange = { onValueChange(it) },
singleLine = singleLine,
textStyle = LocalTextStyle.current.copy(color = textColor),
cursorBrush = SolidColor(textColor)
)
if (hint)
Text(
text = stringResource(id = hintText),
color = textColor
)
}
}
@Composable이라고 annotaion을 달아주고
함수의 인자로 뭐가 막 있습니다.
modifier, focusRequester, focusChange, text, onValueChange 등 뭐가 막 있습니다.
처음 보면 이게 도대체 뭐야?? 할 수 있지만
중요한 건 변하는 것들입니다. 그것만 기억하면 됩니다.
TextField 니까 당연히 우리는 Text를 키보드로 계속 치게 될 것입니다.
그럴 때마다 여기 TextField 가 계속 그려집니다.
한 글자 하나씩 칠 때마다 계속 새로 그립니다.
매개변수의 onValueChage의 변화하는 Text에 따라 계속 변경되는 값을 저장하고 변경될 때마다 해당 Compose를 다시 그립니다.
그리고 또 변할 수 있는 것들을 적을 수도 있습니다.
그래서 focusChange 이런 것들도 적혀있습니다.
왜?? Focus가 달라지면 다시 그려! 하니까요
현재 저는 개인 프로젝트를 만들 때 모두 Compose를 이용하여 만들었습니다.
쓰면 쓸수록 너무나 간편함을 느끼고 전에 동적으로 VIew들을 생성하거나 XML을 이용해 그리고 객체와 연결해주는 작업보다 더 간편하고 관리하고 좋고 코드가 훠어어어얼씬 간결하고 짧아져서 쓰기 좋다고 생각합니다.
앞으로 무조건 선언형으로 바뀌게 될 거라고 생각합니다.
'android' 카테고리의 다른 글
JUnit4를 사용한 Viewmodel , usecase , repository 패턴 Unit Test (0) | 2023.04.21 |
---|---|
한 번의 글로는 이해가 안 가는 안드로이드 테스트 ( 유닛 테스트 & 계측 테스트 ) (0) | 2023.04.21 |
안드로이드 4대 컴포넌트 (0) | 2022.09.26 |
Restful, Rest, Restful API (0) | 2022.09.26 |
Serialization(직렬화) & Deserialization(역직렬화) (0) | 2022.09.26 |