안드로이드 대표적인 패턴 정리

지난 겨울학기, 본인은 학교 수업을 통해 <클린 코드(Clean code, 로버트 마틴 저)>를 접했다. 개발 시 테스트와 코드를 깔끔하게 짜는 것에 대한 중요성은 느끼고 있었지만, 아무래도 본인의 코드는 그것과 영 거리가 멀었다. 테스트 코드는 당연히 없었고 심지어 클래스 분리도 거의 하지 않았(!!)다. 지금이야 ‘한 클래스, 한 메소드는 하나의 기능만 가져야 한다.’는 생각과 Step down rule 등의 원칙을 준수하며 코드를 작성하지만 여전히 부족한 점이 많다.

코드를 예쁘게 짜기 위해 지켜야 할 여러가지가 있지만, 그 중 오늘 다루려 하는 주제는 안드로이드의 세 가지 패턴인 MVC, MVP, MVVM 이다. 스타트업에 안드로이드 개발자 포지션으로 면접을 보러 가면 백에 백은 이에 대한 질문을 했다. 이렇게나 필수적인 지식인만큼 간단한 정리와 적용을 해볼 필요성이 있다고 생각한다.하지만 어렵지 않다고는 안했다... 어려움...

안드로이드에서 왜 아키텍처 패턴을 사용해야 하는가?

앞서 말했듯 코드를 예쁘게 짜기 위함과 동시에 유닛 테스트를 위해서이다. 전자의 경우는 훌륭한 안드로이드 개발자분들께서 이미 입증하셨으니 후자의 이야기를 해보자. 안드로이드를 개발해봤다면 초반엔 통(!)으로 코드를 짜본 경험이 있을 것이고, 그 당시에 테스트 코드를 작성해봤거나 작성하려고 노력했다면… 안드로이드에서 유닛 테스트 코드를 짜는게 쉽지 않다는 걸 알고 있을 것이다.

코드 사이의 종속성이 높기 때문이다. 가령 액티비티에 있는 메소드를 테스트 하려면 테스트 코드에 해당 클래스를 끌어와야 한다. 하지만 그러기도 어려울 뿐더러, 그런 메소드는 대부분 리턴 값이 없기 때문에 테스트를 하는 게 거의 불가능하다. 유닛 테스트를 하긴 힘겨운데 그렇다고 테스트를 아예 버릴 수는 없다. 그렇다면 어떻게 해야할까? 답은 ‘분리’가 되겠다.

본론에 들어가기에 앞서 글을 쓰는 데에 도움을 받은 글 목록의 주소를 첨부한다.

안드로이드의 MVC, MVP, MVVM 종합 안내서

안드로이드 Architecture 패턴

1. MVC(Model View Controller)

안드로이드 아키텍처 패턴의 최초라고 할 수 있는 MVC는 웹의 패턴을 차용한 것으로, 앱을 인터페이스를 분리하기 위한 패턴이다.

2. MVP(Model View Presenter)

MVP는 컨트롤러의 문제점을 덜기 위해, 뷰에 안드로이드 액티비티가 결합된 패턴이다.

참고로 MVP는 다음 글에서 그 예를 다루고 있다. 안드로이드 MVP 패턴 정리

3. MVVM(Model View ViewModel)

뷰를 추상화한다는 점에서는 MVP와 유사하지만, 안드로이드의 데이터 바인딩을 사용해 인터페이스가 불필요한 패턴이다.

이 주제는 다루려면 한 없이 길게 다룰 수 있는 주제이지만, 이번 글에서는 안드로이드 아키텍쳐 패턴에 대해 간략히 알아봤다. 솔직히 말해 안드로이드 패턴을 처음 접했을 때는 이게 무슨 말인지 전혀 감이 잡히지 않았다. 하지만 직접 코드에 패턴 중 하나인 MVP를 적용해보고, 또 글을 정리하니 조금씩 좋은 코드에 다가서게 되는 듯하다. 앞으로 더 노력해서 MVP와 MVVM 패턴을 능숙하게 다룰 수 있는 안드로이드 개발자가 되고 싶다.