돌아오신것을 환영합니다
이 영상에서는 실제로 데이터를 전달 할 View Model(뷰 모델)설정할 것인데
그것이 위도와 경도 차원의 사용자의 실제 위치를 표시합니다
여기서 새로운 데이터클래스를 생성하여 이를 Location Data(위치데이터) 라고 부르겠습니다
이 데이터클래스는 굉장히 간단합니다
두가지의 val이 있을것입니다
한가지는 위도이자 double이 되고, 다른 하나는
경도입니다
잠시만요
스펠링이 틀렸어요
이것도 double 입니다
이것이 저희가 쓸 데이터 클래스 입니다
위치 데이터도 가지고 있습니다
아주 간단합니다
이제 이것에 대한 object(객체)를 만들 수 있습니다
이제 view와 data간의 커뮤니케이션을 관리할 뷰 모델을
설정해 보겠습니다
ㅤ
뷰와 모델이 있는데 모델은 위도와 경도 위치 데이터 이며
나중에 그것으로 주소같은 데이터를 얻을 수 있습니다
여기 이것을 LocationViewModel(위치 뷰 모델) 이라고 부르겠습니다
좋아요
이것을 ViewModel이라고 하고
ㅤ
이렇게
여기에 라이프사이클 뷰 모델을 import 해 와야 합니다
이제 여기서 해야 할것은
여기에 val location을 가지고 싶습니다
여기에 포함될 private변수가 mutable 상태의
리스트에 안보이니 써야되겠습니다 mutableStateOf
그리고 여기에 처음에는 null이라고 할텐데 그렇게 하려면 어떤 유형인지
정의해야 합니다
여기에 Location Data가 nullable 하다고 하겠습니다
MutableStateOf를
Import해줍니다
그래서 위치 데이터를 가지고 싶지만 null 일수도 있습니다
그래서 여기 물음표가 들어가는 것 입니다
그리고 기본값으로도 null이라고 설정하겠습니다
만약 위치가 없다면 그저 위치가 없는것입니다
데이터가 없는것임으로 null이라고 받아들입니다
이제 실제로 접근 가능한 위치 변수를 만들어 보겠습니다
그것은 State〈LocationData?〉이며
그것은 아까의 private 위치가 될것 입니다
여기에 state를 import 해야 하는데
라이프사이클 state를 가져오겠습니다
이게 실제로 맞는건지 확인하겠습니다
Life cycle
ViewModel
맞는게 아니였네요
실제로 맞는 state를 가져오겠습니다
런타임의 state여야 합니다 여기 android compose runtime걸 가져옵니다
조금 까다롭습니다
다른 import를 하면 원하지 않는 일을 하게 되고 나중에 코드가 작동이 안되고
지금 class를 잘못 import 해서 그런것인데 나중이 되면 어디서 잘못됐는지 모를 수 있습니다
그래서 항상 확인이 필수 입니다
이제 여기에 위치를 업데이트 해줄 수 있는 함수를 추가합시다
좋아요
이것이 저희에게 newLocation(새로운위치)를 가져다 줄 것이고 유형은 LocationData입니다 여기있는 데이터 클래스 입니다
ㅤ
유형은 locationData 이고
여기서는 _location.value를 newLocation으로 설정합니다
ㅤ
그럼 이 private location mutableStateOf를 외부적으로 보호해주고
동시에 functions를 사용하여 이를 오버라이드 할 수 있습니다
ㅤ
Kotlin안에서 setter와 getter를 사용하는 방법입니다
만약 setter와 getter이 뭔지 모르신다면 신경쓰지 않아도 됩니다
이제 뷰모델이 설정 되었습니다
이 뷰모델이 어떻게 우리를 도와줄까요?
제가 사용자의 위치를 알고싶은데 그것이 Location Display 컴포저블에 있어야 합니다
ㅤ
기억하신다면 그것은 여기 이 UI, 두가지 요소
텍스트와 버튼 입니다
만약 제가 여기서
이 텍스트 안에 데이터를 오버라이드 하고싶으면
뷰 모델을 관리해야 합니다
그 뷰 모델을 여기에 넣겠습니다
viewModel: LocationViewModel
이렇게
이제 위치표시를 사용하려면 locationDisplay에
ViewModel을 패스해야 합니다
그것을 어디에서 가지고 오냐면
저의 앱 안에서
뷰 모델을 앱에 직접적으로 패스 시킬 수 있습니다
이전에도 본적 있듯이 이것에게 책임을 책임을 더 위로 보내면
뷰 모델 생성 자체가 onCreate함수에서 발생하게 됩니다
여기에 viewModel을
다음 property로 패스합니다
아직 오류가 나는지 확인해보겠습니다
이제 오류는 없습니다
하지만 여기엔 당연히 오류가 있습니다 그래서 제가 myApp이라고 한것인데
여기에 뷰 모델을 패스해야 합니다
그 뷰 모델은 어디서 가져올까요?
그것이 우리가 onCreate에서 생성할 것 입니다
그것은 setContent 안에서 하겠습ㄴ디ㅏ
val viewModel이 locationViewModel이 될것이고 또 그것이 이런식으로 viewModel이 된다고 합니다
이렇게요
ViewModel을 import하겠습니다
아니면 여기에 dependency(종속 항목) 추가해야 합니다
ㅤ
가끔은 import를 추가하기 위해서 dependency를 추가해야 합니다
이미 가지고 있는 dependency안에 있는 import는 그냥 사용할 수 있습니다
그렇게 하면 두가지 일을 한번에 하는 것 입니다
Dependency도 추가하고 import도 추가하는것 입니다
그러니 이것을 클릭합니다
이제 Gradle이 싱크 되었습니다
이것도 이전에 뷰 모델을 사용할때 본적이 있죠
우선 빨리 여기에 뷰 모델을 패스 시켜서 오류를 없애보겠습니다
이제 Gradle을 봐서 실제로 우리가 한일이 무엇인지 보겠습니다
무엇을 했을까요
우리는
이
뷰 모델을 추가했는데
어디갔는지 봅시다
이 implementation이 추가되었습니다
여기에 마지막 implementation입니다
이것이 자동으로 생긴 것 입니다
좋아요
그것은 우리가 해야할일들 중 하나였고
봅시다
다른하나는 여기 이것입니다
com.google.adroid.gms:play-services-location:21.0.1
이것이 우리가 위치 API에 접근할 수 있도록 합니다 이것을 싱크하면
예를들어 구글맵 위치 서비스나 구글플레이 위치 서비스 같은것을 사용할 수 있게 됩니다
굉장히 힘이 많습니다
그리고 이는 예를들어 위도와 경도가 실제 주소로 어떻게 되어있는지
알수 있게 합니다 나중에는 주소도 알아야 하니까요
이제 메인 액티비티로 돌아가겠습니다
이제 viewModel을 사용 가능합니다
이제
LocationUtils로 넘어가봅시다
이 locationUtils안에 새로운 함수를 추가하고 싶습니다
그것이 사용자의 위도와 경도를 알려줄것 입니다
그 부분은 다음 영상에서 다루도록 하겠습니다
이 영상에선 준비를 마친것 입니다
다음 단계에서는 위도와 경도를 볼 수 있도록 이 기능을 마무리 짓겠습니다
그리고 그 후에 실제 주소를 추가해 보겠습니다
위도와 경도를 이용해 주소를 읽는것입니다
다음영상에서 봅시다