Android

    [Compose]스톱워치

    [Compose]스톱워치

    전 컴포즈 게시물에서는 간단하게 비만도 계산기를 만들어 봤다. 이번 게시물에서는 다음 그림과 같이 스톱워치를 만들어보면서 콜백함수와 컴포즈로 뷰 작업 하는 것에 익숙해져야겠다. 시작을 하면 초와 밀리초가 나오면서, 랩타임을 클릭했을 때 위와 같이 시간이 기록되고, 정지를 눌렀을 때 모든 기록된 시간이 초기화된다. 먼저 ViewModel로 기능먼저 구현해보자. private var time = 0 private var timerTask : Timer? = null //현재 진행되고 있는지 private val _isRunning = mutableStateOf(false) val isRunning : State = _isRunning private val _sec = mutableStateOf(0) val ..

    [JETPACK개론] Paging

    [JETPACK개론] Paging

    Jetpack Paging 라이브러리는 말 그대로 하나의 문서를 분리된 페이지로 나누는 것. 즉, 데이터가 클 때 작은 단위로 쪼개서 사용하는 곳에 적용된다. 예를 들어 구글에 안드로이드를 검색했을 때 수십억개의 결과가 나온다. 이를 한 번에 전달한다면 엄청난 트래픽이 발생할 것이다. 따라서 검색 결과를 10개씩 페이징해서 보여준다. 안드로이드 공식문서에 따르면 대규모 데이터 세트의 데이터 페이지를 로드하고 표시할 수 있다고 나와있다. 직접 paging을 구현하려면 너무 어려운 점이 많기 때문에 구글에서는 paging 라이브러리를 발표했다!! 페이징은 프로젝트의 적절한 관심사를 분리를 요구하며 안드로이드 권장 아키텍처에 통합되도록 만들어졌으며, 위와 같이 작동된다. 개별데이터가 PagingSource로 ..

    [JETPACK개론] DataStore

    [JETPACK개론] DataStore

    기존 프로젝트에서 서버에서 받은 로그인 토큰값을 간단하게 저장하기 위해 SharedPreferences를 사용하여 저장하였다. 복잡한 대규모 데이터가 아닌, 소규모였기 때문에 Room을 사용하기보다 SharedPreferences를 사용해서 저장했다. DataStore는 SharedPreferences의 단점을 보완하며 등장했다. DataStore가 데이터처리에 Flow를 도입했기 때문에 스레드나 예외처리 부분에서 개선되었다. ui스레드에서 안전하게 call할 수 있고, 예외처리에서도 안전해졌다. 이렇게 여러 가지 단점들을 보완하며 나타난 것이 DataStore이다. DataStore에는 다음과 같이 두 가지 유형이 존재한다. 이 글에서는 키를 사용하여 데이터를 저장하고 데이터에 엑세스하는 Prefere..

    [Compose]비만도 계산기

    [Compose]비만도 계산기

    계속 xml로만 안드로이드 개발을 해왔는데 이제부터 익숙해지려면 Compose로만 해야할 것 같았다.. 그래서 간단히 이번 글에서는 xml이 아닌 compose로만 bmi 계산기를 만들어보자! 먼저 첫 번째 화면을 만들어보자. 첫 번째 화면에서의 앱의 가장 상단바를 Scaffold를 이용해서 만들 수 있다. Scaffold( topBar = { TopAppBar( title = { Text("비만도 계산기")} ) } ) 위와 같이 title을 만들어주면 앱의 상단바가 완성된다. 입력할 수 있는 TextField 두 개, 버튼 한 개가 있는데, 여기서 그냥 TextField가 아닌, 입력할 때 hint값이 올라가는 OutLinedTextField를 이용해야 한다. Column( modifier = Mod..

    [Compose] ViewModel, State

    컴포즈에서의 ViewModel 버튼을 클릭하였을 때 원래 있던 텍스트가 다른 텍스트로 변경되는 프로그램을 구현하였을 때 생명주기를 고려하지 않는다면 다음과 같이 구현할 수 있다. // val data = remember{mutableStateOf("Hello")} Button(onClick = { // data.value = "World" //눌러도 변경이 안됨. //변경이 되면 컴포즈가 다시 리셋이되어 hello가 계속 나옴 //따라서 리멤버 사용 만일 remember를 사용하지 않는다면 눌러도 변경이 안되는 것을 확인할 수 있다. 왜냐하면 변경이 되어도, 다시 컴포지션이 발생하여 리셋이 되어 원래 있던 Hello가 계속 나오게 된다. 이를 해결하기 위해 이전에 있던 상태를 기억하기 위해 위의 코드처럼..