일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 클린아키텍쳐
- retrofi
- 키스토어
- 메모리릭
- 리사이클러뷰 체크박스
- #안드로이드
- zeplin
- retrofit
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드 익명클래스
- 안드로이드 아키텍쳐
- #SMS API #안드로이드 SMS #SMS Retriever
- #ContentProvider #App DataShare
- 제플린
- #리사이클러뷰 어댑터
- 안드로이드
- retrofit2
- 빗버킷 #bitbucket #authorization failed #깃
- 구글맵안돼요
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- MVVM
- #리사이클러뷰
- 안드로이드 메모리릭
- 안드로이드해상도
- 사용법
- 레트로핏
- Today
- Total
땀이 삐질삐질 나는 개발 일기
[안드로이드] 아키텍쳐? 패턴 ? 처음엔 아무것도 모른다면 이것 만이라도.. 본문
제가 한 줄로 요약하고 싶은 건 ,
위의 용어들이 뭔지 모르겠다면 그냥 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에 전달하던지 할게 !! 하는 놈 입니다 )
참 어렵죠? 도형으로 관계를 표현하면 이렇습니다.
(여기서 실선으로 표현 한 놈이 중재자 역할을 하며, 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들의 성질에 대한 데이터는 하나도 가지고 있지 않으며 필요한 데이터에대한 가공만을 담당함
'개발 Tip' 카테고리의 다른 글
[안드로이드]요즘 핫한 안드로이드 Mvvm 패턴을 공부하는 것.. (4) | 2020.08.26 |
---|---|
DI(Dependency Injection)이란? 맛만 이라도 보자! (0) | 2020.06.03 |
[안드로이드] 심심해서 찍어본 Retrofit 동기 / 비동기 Feat.Rx (0) | 2020.04.22 |
[안드로이드] 기본적인 Recyclerview ViewType으로 홀더 나누기, 다른 Layout만들기 (0) | 2020.04.16 |
[안드로이드] 익명클래스가 메모리릭을 유발하는 EU(이유) (0) | 2020.03.12 |