240228 TIL

DoDoBest

·

2024. 2. 28. 23:15

오늘 학습한 내용

  1. Android 구현 연습
    - MVVM에서 View가 ViewModel의 함수를 호출하면서 callback 형태로 결괏값에 따라 UI를 업데이트하게 구현하면 안된다.
    1. LiveData를 observing할 때, lifecycleOwner를 지정하는 이유는 무엇일까? -> View가 살아있을 때만 데이터의 변화를 수신받기 위해서다.
    2. ViewModel에 callback을 넘기면 어떻게 될까? -> View의 Lifecycle과 무관하게, ViewModel이 죽지 않는한 callback이 무조건 처리된다.
    3. 만약 ViewModel이 처리하는 과정에서 View가 죽었는데, callback을 처리하면 어떻게 될까? -> 앱 crash가 발생한다.
    4. 따라서 View가 ViewModel을 호출할 때, callback 형태로 넘겨서는 안 된다.
    - RecyclerView ViewHolder에서 이미지 로딩이 필요하면, ViewHolder가 속한 Activity 혹은 Fragment에게 요청하지 않고 이미지 로딩을 담당하는 객체에게 바로 요청해도 된다. ViewHolder도 Activity, Fragment와 같은 View로 볼 수 있다.
    - 이미지 로딩을 Dispatchers.IO로 처리하는 함수를 호출할 때, 이미지 로딩이 완료되면 callback을 통해 이미지 관련 View를 업데이트하도록 하지 말고, View 자체를 넘기고 해당 함수에서 Dispatchers.Main으로 전환 후 업데이트하도록 하는 것이 낫다.
  2. Android 의존성 주입 강의 1-2
  3. Android View가 그려지는 과정 학습
    - Optical bound가 무엇인지 찾아보다가 글이 너무 길어지고 시간도 2시간이나 소모했다. 너무 딥한 내용은 넘어가기로 다짐했는데, 투자한 시간이 아까워서 계속 찾아보다가 결국 궁금한 점을 알아내지 못하고 끝났다. 내일부터는 중요하지 않고 자료가 없는 내용을 만나면 과감하게 넘어갈 것이다.
    https://dodobest.tistory.com/54
  4. Kotlin In Action 9-3 변성: 제네릭과 하위 타입

 

내일 학습에 반영할 내용

  1. 중요하지 않은 내용 넘어가기
  2. 시간표 계획대로 학습하되, 어중간하게 끝날 것 같으면 계속 이어서 하기
    - 오늘 이것 저것 학습한 것은 많은 것 같은데, 기억에 남는 것은 많지 않다.
  3. 부족한 CS, 코딩테스트 준비에 더 시간 투자하기
  4. Android View가 그려지는 과정을 학습하는 데 시간이 매우 많이 들고 있다. 공식 문서의 매 문장이 의미하는 바가 이해 되지 않아, 쓰인 단어의 의미가 무엇인지 해석하고 관련 코드를 확인하기 때문인데, 다른 것을 학습하고 남은 시간에 하는 게 좋을 것 같다.

 

MVVM과 DI

 

MVVM의 요구사항엔 메뉴얼 주입이 아닌 DI를 활용하도록 가이드하고 있다.

Using a dependency injection container can help to maintain loose coupling between the view and view model. For more information, see Dependency injection.

 

https://learn.microsoft.com/en-us/dotnet/architecture/maui/mvvm#creating-a-view-model-programmatically

 

Model-View-ViewModel - .NET

Overview of the Model-View-ViewModel pattern used by .NET MAUI

learn.microsoft.com

 

메뉴얼 주입의 방식은 MVP 방식에서 사용했는데 View를 그려주는 P가 보일러플레이트와 비대해지는걸 줄이기위해  MVVM이 나왔다.

 

의존성 주입을 학습하게 된 이유

어떤 라이브러리 또는 기술을 사용할 때, 필요성을 먼저 느껴야, 해당 기술의 내부 동작 원리에 대한 이해가 있어야 의미가 있다고 생각했다. 많은 공고에 Hilt와 클린아키텍처에 대한 이해를 요구해서, 필요성을 느끼지는 못했으나 이해해보려고 학습했던 적이 있다. 간단하게 사용하는 방법은 이해했으나, 그래서 왜 사용하는지, 내부에서는 어떻게 동작하기에 Hilt를 사용하는 건지는 이해하지 못했다. 그래서 최대한 수동 DI로 구현했다. 규모가 큰 프로젝트를 하지 않고, 화면 1, 2개의 학습을 위한 프로젝트만 해와서 필요성을 못 느꼈을 수도 있다.

https://dodobest.notion.site/2020-Hilt-e1492855dd0f49ba935f6a63a9ff2cce?pvs=4

 

드로이드나이츠 2020 Hilt | Notion

옥수환 - Hilt와 함께 하는 안드로이드 의존성 주입.pdf

dodobest.notion.site

 

 

튜터 님의 추천으로 현직 개발자 분들이 계신 단톡방을 알게 됐고, 마켓 컬리 경력자 개발 공고를 다른 분이 올려주셔서 보게 됐다.

해당 공고에서도 DI와 클린 아키텍처에 대한 이해를 요구하고 있다. 

 

이런 공고를 볼 때마다, 회사에서 요구하는 신입 또는 경력자의 이해 수준은 어디까지인지가 궁금했다. 그래서 이와 관련하여 Hilt를 이해하기 위한 학습 방향에 대해 질문을 드렸고 아래 강의를 추천받았다.

 

https://fastcampus.co.kr/dev_online_dihilt

 

Android 의존성 주입 완전정복 : Hilt로 확장성 높은 앱 완성하기 (feat. 클린아키텍처) | 패스트캠퍼

Hilt 도입 단계 혹은 사용을 고려하는 개발자라면, 찰스의 안드로이드 옥수환 강사님과 함께하세요! 약 20시간 동안 의존성 주입의 원리부터, Hilt 사용법, 확장성 높은 앱을 위한 아키텍처, 고급

fastcampus.co.kr

 

강의를 수강하면서 DI가 왜 필요한지, 왜 Hilt로 사용하는지, 클린 아키텍처의 진정한 의미는 무엇인지 학습하려고 한다.

강의 내용과 관련해서는 저작권 문제로 블로그에 작성할 수 없을 것 같다.

https://day1fastcampussupport.zendesk.com/hc/ko/articles/17733504209689--수강한-강의-내용을-블로그나-개인-사이트에-올려도-되나요?input_string=강의+내용+정리

 

'TIL' 카테고리의 다른 글

1주차 KPT  (0) 2024.03.04
240229 TIL - 학습 방향  (0) 2024.02.29
240227 TIL  (0) 2024.02.27
240226 TIL  (0) 2024.02.26
240220 TIL  (0) 2024.02.21