Skip to content

2주차 피어세션 토론 기록

최현지 edited this page Dec 7, 2022 · 1 revision

2주차 피어세션

종성님 질문 : 로컬 파일을 어떻게 불러올것인가?

  • thread.contextClassLoader.getResource → 이렇게 밖에서 부를 수 있다..!
  • 데이터 모델의 안드로이드 의존성에 대해 어떻게 생각하는가
    1. 종성님 : 클린 아키텍쳐는 공식적으로 코틀린 순수 모듈로 작성한다고 리뷰를 받았다.
    2. 현지님 : 안드로이드 데이터 모듈은 안드로이드 의존성을 당연히 가질 수 밖에 없다고 생각한다.
      1. 룸이나 등등 컨텍스트를 필요로 하는 라이브러리가 너무 많다.
  • suspend 없이 어떻게 할 수 있을까?
    • 콜백 or 플로우를 이용하면 suspend를 하지 않고도 원하는 쓰레드에서 작업할 수 있다.

우리 질문 1 : Activities vs Fragments

  • 종성님 : 앱이 종료되고 다시 들어갈때, Fragment의 깊이가 깊을때, 다시 들어가면 모두 재생성해야하는데, 과연 이게 맞는 행동일까?

  • 시진님 : 스택이 쌓여있는 경우에 종료가 되더라도 딥링크를 이용해서 특정 화면으로 이동할 수 있다는 발표를 들었다.

  • 딥링크로 들어가면 스택이 다 유지될까? 스택 켜지는게 다 보일까…?

  • 액티비티 파

    • 동훈님 : 액티비티 전환이 필요한 UI/로직이 존재한다면 액티비티를 바꾸어야한다.
    • 주영님 : 툴바가 달라지거나, 바텀 네비게이션이 없는 경우 숨기고 다시 보여주는 과정이 쿨 하지 못하다.
  • 프래그먼트 파 (싱글 액티비티)

    • 종성님 : 액티비티 전환 애니메이션이 구리다.
    • 경현님 : 액티비티가 무겁기 때문에 싱글로 만들고 프래그먼트 전환하는게 낫다.
  • 액티비티가 프래그먼트가 무겁다고 하는 근거는?

    • 단적인 예시 ) fragment는 context가 없음
    • Fragment는 상속 받는게 없다…?
    • 또다른 이유는 뭐가 있을까?
  • View vs Fragment ?

    • 시진님 : 액티비티 / 프래그먼트는 뷰를 담기 위한 부모 느낌이다.

지민님 질문 : 지도를 Fragment에서 사용하고 있는데 코드의 양이 너무 많아졌다. 이걸 떼어내는 작업을 할 수 있을까?

  • 동훈님 : Tmap도 비슷하다고 생각합니다. 네이버 지도는 생명주기에 많은 영향을 받아서 더욱더 떼어내기 힘들어요. 시도를 할 순 있지만, 큰 작업이 되지 않을까 예상합니다.
  • 종성님 : 모듈을 따로 생성해서 동작을 부여하는건 어떤가요?
  • 동훈님 : 그것도 방법이 되겠지만 큰,,, 작업이 될 것입니다…
  • +) 추가적으로 위치나 검색을 카카오나 네이버가 지도에서 떼어낸 데에는 다 이유가 있다고 생각한다. 지금처럼 쓰레드 변경이 필수적이고, 이런 부분에서는 멀티 모듈에서는 유쾌하지 않다고 생각한다.

우리 질문 2 : 프로젝트 디자인 패턴, 선정 기준은? MVC vs MVP vs MVVM (vs MVI?)

  • 시진님 : 상황에 맞게 사용한다. View와 ViewModel의 관계가 MVP는 1:1, MVVM은 1:다 연결이 가능하다.
  • 현지님 : ViewModel을 Wear OS에 가서 사용한 적이 있는데 관리가 잘 되어 있던 프로젝트가 아니라서 유쾌한 경험이 아니었다..^^ 관심사 분리가 잘되었다면 아주 멋진 경험이었을 것 ^^
  • 동훈님 : 홍머병 살짝 궁금하다 (MVI 어떻게 쓰는걸까?)
  • 종성님 : MVP, MVVM 둘다 싫다. View는 왜 Presenter를 알면 안되는 등
  • 현지님 : 재사용성을 위해 분리를 하는 것을 지향한다.
  • 동훈님, 현지님 : 후작업을 위해 분리하는것이 더 좋지 않을까?
  • 현지님 : MVVM 좋아합니다. 데이터 바인딩으로 깔끔하게 작업하는게 좋다. 그러나 데이터가 많지 않다면 굳이 사용 안해도 되지 않을까.
  • 민성님 : 호출하기에는 MVP가 더 사용하기 쉬웠다.

시진님 질문 : Repository 와 UseCase의 역할

  • 레포지토리의 역할
    • 데이터소스의 캡슐화, 유즈케이스나 뷰모델에서 어떤 동작을 했는지 모르게
  • 유즈케이스의 역할
    • 레포지토리의 캡슐화? 라고 표현을 해도 되나 모르겠네
    • 여러 레포지토리의 결과와 함께 연산을 수행
  • 전반적인 에러 핸들링 토론 결과
    • 필요한 곳에서 요청하자~

우리 질문 3 : ViewModelScope가 어느 시점에 종료되는가?

프래그먼트에서 화면 전환이 일어나면 ViewModelScope가 종료될거라고 생각하는 사람들이 많다. 하지만 프래그먼트의 onDestroy까지 호출되야 종료된다. 일반적으로 화면 전환을 하게 된다면 onDestroyVIew까지만 호출이된다. 그러므로 여러 정리 작업을 해야될때는 onDestroyView에서 처리해야 한다.

그래서 메모리 누수가 일어날 수 있으므로, ViewModelScope를 쓸때는 종료하는 동작을 꼭 고려해야한다.

이 부분의 심각성을 알 수 있는 예시를 들자면, viewModelScope에서 collect를 실행하여 무한 반복을 하고 있다면, 그 데이터가 필요한 fragment에서 벗어나 다른 fragment가 위에 쌓이더라도 그 viewModelScope는 종료하지 않고 계속 실행되게 된다. 그렇게 계속 중첩된다면…

경현님 질문까지는 아니고 궁금 :

권한 실행하는 곳이 여러 곳에 있는데 어떻게 처리하셨는지?

  • 동훈님 : 똑같이 했습니다… 다시 요청은 하지 않아요
Clone this wiki locally