• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

안드로이드에서 아키텍처 패턴

24.01.11 16:49 작성 24.01.11 16:55 수정 조회수 127

0

안녕하세요. 강의 잘 듣고 있습니다.

안드로이드 패턴에 대해서 몇 시간동안 듣고 검색도 해보면서 이해하는 중인데 어려움이 있어 질문을 드립니다.

 

MVC에서 그림에서 이해가 안되는 부분이 있습니다.

 

[1] 안드로이드에서 버튼은 결국 View가 가지고 있고 이벤트는 View에 있는 버튼을 눌러서 발생하기 시작할 것 같습니다. 그럼 뷰는 입력 받은 이벤트에 대해 컨트롤러에게 전달을 해줘야할 것이고 컨트롤러는 전달 받은 이벤트에 대한 작업을 수행하고 모델에 전달 후 모델의 변경을 다시 뷰에게 전달해주는 것인데 이런 생각으로

 

인풋은 뷰쪽으로

뷰와 컨트롤러는 쌍방향 화살표가 되어야한다고 생각했습니다.

 

[2] MVP에 경우에 View와 Model사이 간접적 화살표가 사라졌는데, MVP에 경우에도 프레젠트를 사이에 두고 모델에 데이터가 뷰쪽으로도 이동해야만 한다고 생각이 들고 그렇다면 간접적으로 이동하는 것은 똑같으니 MVC에서 M->V 점선 화살표가 유지되어야 하는 거 아닌가 하는 생각이 들었습니다.

 

[3] MVP에서 프레젠트가 인터페이스를 통해 뷰와 모델을 거치게 되는데

[MVC] V <-> C

[MVP] V <-> Interface <-> Presenter

한 단계를 추가해서 의존성 주입(관심사를 세분화)라고 이해해도 될까요?

 

혹시나 시간이 되신다면 설명 부탁드립니다.

답변 1

답변을 작성해보세요.

0

우선 MVC, MVP, MVVM은 안드로이드가 나오기도 전부터 있었던 굉장히 오래된 개념이라는 것을 알아주시기 바랍니다. 강의에서도 설명했지만 MVC는 1970년대, MVP는 1990년대에 나온 아키텍처이므로 이 아키텍처에서 말하는 View 혹은 ViewModel이란 어떤 구조를 설명하기 위한 의도에서 만들어 낸 개념이지, 그것이 안드로이드의 View와 ViewModel에 정확히 1:1로 대응되는 무언가가 아닙니다. 안드로이드의 Activity라는 개념부터가 View와 Controller를 섞은 상태로 만들수도 있고, 또 따로 분리하여 만들 수도 있는 어중간한 클래스이기 때문입니다.

 

또 강의 마지막에서 언급했듯이 아키텍처의 개념은 과학적으로 입증되어 불변인 개념이 아니므로, 집단에 따라 생각하는 형태나 구조가 조금씩 다를 수 있습니다. 제가 강의에서 보여드린 그림은 인터넷에서 아키텍처 구조를 검색하면 대표적으로 찾을 수 있는 그림으로 여러 블로그나 기사에서 이 그림으로 아키텍처 구조를 설명하고 있습니다만, [1]번 질문에서 하신것 처럼 인풋을 뷰가 받는다고 생각하는 사람도 있습니다. 아키텍처 속에서 화살표의 방향이 어떻게 되느냐는 것은 이 얘기의 본질이 아니며 정답이라는 게 없을 뿐더러 정답이 무엇인가 하는 게 중요한 것도 아닙니다.

 

중요한 것은 코드의 일관성을 유지하고 유지보수성을 높이기 위한 방법에 대해 과거로부터 사람들이 계속 고민을 해 왔고 그것이 모델의 개선 혹은 변화라는 형태로 이어져 왔다는 것을 아는 것입니다.

 

다만 3번으로 질문하신 것의 대답을 드리면 제가 강의에서 설명한 것처럼 MVC에서 중간에 인터페이스를 추가한 것의 의도는 관심사를 분리(separation of concerns, SoC)하는 효과를 얻는 것입니다. 관심사를 분리하기 위한 여러가지 설계의 원칙을 정리한 것이 SOLID이며, SOLID를 구현하기 위한 여러가지 방법 중의 하나가 의존성 주입이라고 생각하시면 됩니다. 이 부분에 대해서는 섹션10. Dependency Injection 기초 영상을 참고하시기 바랍니다.