Kotlin의 Property Delegation과 Compose의 remember 함수 이해하기
Last updated
Last updated
Jetpack Compose에서 Composable의 생명주기는 다음과 같은 단계로 이루어집니다:
Composable이 처음 생성되고 컴포지션에 추가됩니다.
Composable은 상태(state)가 변경될 때마다 재구성됩니다.
이 과정에서 UI는 변경된 상태를 반영하며 업데이트됩니다.
더 이상 필요하지 않은 Composable은 컴포지션에서 제거됩니다.
이떄,remember
함수는 이 생명주기 동안 값이 효율적으로 유지되도록 도와줍니다.
만약 remember
를 사용하지 않는다면, 비싼 연산이 재구성될 때마다 반복적으로 수행되어 성능 문제가 발생할 수 있습니다.
이렇듯, Kotlin과 Jetpack Compose를 사용하다 보면 효율적인 코드 작성과 성능 최적화를 위해 알아두어야 할 개념들이 있습니다. 특히 Property Delegation과 remember 함수는 코드 가독성과 성능 향상에 큰 도움을 줍니다.
Property Delegation은 Kotlin에서 제공하는 강력한 기능으로, getter와 setter를 커스터마이징하거나 반복적인 코드를 줄이는 데 유용합니다. 대표적인 예로 lazy
, observable
, vetoable
같은 기본 제공 델리게이트를 사용할 수 있습니다.
(1) Lazy Initialization
설명: lazy
는 값이 처음 호출될 때 초기화되며, 이후에는 캐싱된 값을 반환합니다.
(2) Observable Delegation
설명: 속성이 변경될 때마다 콜백이 호출되어 변화 내용을 추적할 수 있습니다.
Jetpack Compose에서 remember
함수는 컴포지션 내에서 상태를 저장하는 데 사용됩니다. 이는 불필요한 재구성을 방지하고 효율적인 상태 관리를 가능하게 합니다.
Composition Scope: remember
는 해당 컴포지션이 살아있는 동안 값을 저장합니다.
재구성 방지: 값이 변경되지 않는 한 재구성(recomposition) 시에도 저장된 값을 그대로 유지합니다.
효율성: 반복적으로 수행되는 비싼 연산을 피할 수 있습니다.
(1) 간단한 상태 저장
설명: remember
를 사용하여 mutableStateOf
를 감싸면, 컴포지션이 재구성되어도 카운터 값이 유지됩니다.
(2) 비싼 연산 저장
설명: performExpensiveOperation
함수는 remember
덕분에 한 번만 호출됩니다. 이후 재구성 시에도 결과값은 유지됩니다.
(3) remember와 rememberSaveable의 차이
설명: rememberSaveable
은 프로세스 종료 또는 화면 회전 이후에도 값을 유지합니다. 반면, remember
는 컴포지션 범위에서만 값을 저장합니다.
remember
와 같은 도구를 활용하면 Jetpack Compose에서 다음과 같은 성능 최적화를 이룰 수 있습니다:
불필요한 재구성 방지: 상태 저장을 통해 비효율적인 UI 업데이트를 방지합니다.
비싼 연산 최적화: 반복적으로 호출될 필요가 없는 연산을 한 번만 수행합니다.
코드 간소화: 명확하고 간결한 상태 관리 코드 작성이 가능합니다.
Kotlin의 Property Delegation과 Jetpack Compose의 remember
같은 함수는
각각 다른 영역에서 코드의 효율성과 가독성을 높이는 데 중요한 역할을 합니다.