땀이 삐질삐질 나는 개발 일기

[안드로이드] 아키텍쳐? 패턴 ? 처음엔 아무것도 모른다면 이것 만이라도.. 본문

개발 Tip

[안드로이드] 아키텍쳐? 패턴 ? 처음엔 아무것도 모른다면 이것 만이라도..

삐질 2020. 4. 30. 20:30

 

안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
 
 
오늘은 여러분께 또 한번 저의 개인적인 견해를 강요해보려 합니다.
 
요즘 블로그나, 단톡방, 여러가지 소통창구에서 많이 논의되는 단어 중 하나는 
 
아키텍쳐 패턴 , 디자인패턴 , mvvm, mvp, mvc 뭐 컨벤션 이런 용어들 일겁니다.
중복단어가 있긴 하지만..

 

 

제가 한 줄로 요약하고 싶은 건 ,

 

위의 용어들이 뭔지 모르겠다면 그냥 MVC만 기억 하세요 

 

 

 

우리가 개발을 효율적으로 하기 위해서는 역사적으로 많은 컨벤션 ( 규칙, 권고 등등) 같은 것들이 즐비해있어요.

당연하게 코드분리라던지, 객체지향법이라던지 뭐 여러가지가 있죠

 

그 중에서 요즘 가장 핫한건 아키텍쳐 패턴들에 관한 것 인데요

 

MVC/ MVVM/ MVP /MVI / MVW

 

너무나 많죠. 하지만 우리는 애석하게도 이것들을 다 알기란.. 너무 어렵습니다.

 

그래서 저는 초급 개발자 분들께는 다 잊어버리시고 MVC하나라도 알고계시라고 이것만 알아도 어느정도 개발한다고 말씀드리고 싶어요.

 

 

 

인터넷에 블로깅 또는 구글링을 하다보면 이런 말을 많이 들을거에요 

 

안드로이드는 뭘 해도 기본적으로 "MVC"로 짤수 밖에 없어

 

못 들어보셨다면 죄송 !!

 

이것이 무슨 말이냐면 기본적으로  코드는 분리를 할 수록 재사용성 또는 가독성이 올라갈 확률이 높습니다.

(무조건은 아녀요 그치만 대부분의 경우에 ..)

 

그런데 어떤 기준으로 분리를 할 것이냐? 가 문제겠지요??  

( 개인적으론 위의 MVC/MVVM/MVP 규칙 외에  It's My Style -> IMS 패턴도 좋습니다.)

 

그래서 그 기준에 대한 것을 줄인 용어가 위의 MVC / MVVM / MVP 등 입니다

 

사실 이것들이 다 뭐야? 하시는 분들이 이 글을 읽으셨을때, 아래에 장황하게는 써 놓겠지만 의미를 정확히 이해 하시리라 생각하진 않습니다. 다만 이런것이 있고, 그렇구나 ~~ ㅇㅇㅇㅇㅇ 알겠어 ~~ 하고 단어들에 대해 익숙해지시기라도 했으면 하는 바람입니다.

 

M -> Model ( 실제로 안드로이드 Context라던지, TextView라던지 기타 Android의 어떤 특성을 배제하고 순수 자바로만 데이터 핸들링을 할수 있는 녀석) 

즉 , 많이 들어보셨던 "비지니스 로직"을 다루는 놈이에요 . 비지니스 로직이란, 내가 앱을 사용하는데 실제로 필요한 의미있는 데이터들을 핸들링( 가공 ) 하는 로직이에요. 

 

V -> View ( 이 녀석은 사용자에게 보이는 페이지나, TextView나 실제로 스크린에 보이는 껍데기를 의미하는 놈 입니다 ) 

 

C -> Controller ( 이 녀석은 View 즉 사용자가 보고있는 Button이나 , EditText에 어떤 이벤트가 발생 했을때, 그 이벤트를 기반으로 하여금 Model에게 야 필요한 데이터 만들어서 다시 돌려줘 !! 그러면 내가 V에 전달하던지 할게 !! 하는 놈 입니다 )

 

 

참 어렵죠?  도형으로 관계를 표현하면 이렇습니다.

 

MVC란? MVC 디자인 패턴

 

(여기서 실선으로 표현 한 놈이 중재자 역할을 하며, Model에서 View에 접근할 수 없기때문에 점선으로 표현합니다. ) 

무슨 말이냐면, 각 역할대로 나누면, 내가 접근해도 되는 역할이 있고, 접근하면 안되는 역할이 있습니다. ( 관심사 분리 및 의존성 분리 같은..용어로 표현하기도 해요 ) 

 

즉 Model에서 Activity로 접근할 수 없는 것을 뜻 해요 .

 

사실 위의 이런 주구장창 하는 말들도 크게 유의미하진 않습니다.

제일 중요한것은 프로젝트 단위로 보았을때 코드 작성의 일관성 / 적절한 메서드 분리 ..

이 2가지만 잘 지켜져도 웬만큼 괜찮은 프로젝트가 될수 있어요 .

 

 

무슨 말이냐면, 내가 코드를 작성하는 규칙을 통일하라는 말입니다. 또 메서드 단위로 컨트롤 하라는 것 입니다.

 

EX) TextView 네이밍 -> text_name , text_title 이런식으로 하다가 다른 xml에서는 TextName, TextTitle 이렇듯 규칙을 기준없이 혼용해서 쓰지 마십시오. 펑션 네이밍 또한 마찬가지 입니다. 네이밍에서 뿐 아니라 메서드들을 Call 하는 방식도 그것이 맞던 틀리 던, 일관성을 유지해야 합니다.

 

EX) 메서드 단위로 컨트롤이란, 하나의 메서드 안에  클릭처리도 하고 ~ 커스텀뷰도 만들고 ~~ Textview 속성도 변경하고~~  이렇듯 하나의 메서드(펑션)안에 잡다한 기능들은  최대한 공통적인 기능으로 세분화해서 메서드(펑션)을 분리해주세요. 

 

- 클릭처리

- 커스텀뷰 리프레시

- 텍스트뷰 속성 변경

 

이렇게 각각의 기능별로 분리해서 원하는 곳에 호출만 할 수 있도록.. 그래야 깔끔하겠죠? 

 

아무튼 여러분들 너무 복잡할 필요도 없습니다.  "기능별 메서드 분리" And  "코드 작성의 일관성" 두 가지만 지켜서 개발 해주시면 언제어디서든 나름 편리하게 개발할 수 있습니다. -> 요것을 지키기 위해서는 사실 초반에 귀찮아요. 하지만 잘 지켰을때 나중에 어떤 특정 기능만 샥 변경하려는데 , 여기도 바꿔야하고 저기도 바꿔야하고 이런 불상사가 적게 일어납니다.  사이드 이펙트라고 합니다 

 

 

말로 구구절절 설명하기 보다 코드를 보시는 것이 여러분들이 더 편하실 것 같아 아래에 깃허브 주소를 공유합니다.

 

GITHUB

https://github.com/jaekanglee/BasicCode

 

깃헙에서는 아래처럼 동작하는 예제 입니다.

1. 리사이클러뷰로 리스트를 표현한다.

2. 각 아이템을 클릭하면 값을 변환시킨다

3. 각 계층 (  View, Model, Controller )에 맞게 메서드를 작성 / 분리 한다.

 

안드로이드는 V와 C를 같이 가지고 있습니다.  ( 검색 플리즈 )

 

VC-> Adapter / Activity -> 사용자가 눈으로 볼수 있는 영역에 대한 성질이나 특성들을 처리하고 관리함 

 

M -> Model / Entity  -> 실제로 Activity의 성질이나, 각 View들의 성질에 대한 데이터는 하나도 가지고 있지 않으며 필요한 데이터에대한 가공만을 담당함

 

 

 

초급 안드로이드 개발자를 위한 카카오톡 오픈 채팅방을 운영 중 입니다. 
(저는 마냥 친절한 방장은 아닙니다.  다만, 다 같이 성장하고 싶은 방장이며 개발자 입니다)

 

Comments