본 포스팅은 각종 인터넷과 유튜브에서 올라온 자료를 재구성한것으로 틀릴 가능성이 다분히 있음.

코틀린 기반으로 쓰여짐


 

 

1.Modern Android Development?

Modern Android Development  |  Android 개발자  |  Android Developers

 

Modern Android Development  |  Android 개발자  |  Android Developers

Android 개발자를 위한 공식 사이트입니다. 앱 개발자 및 디자이너를 위한 Android SDK 및 문서를 제공합니다.

developer.android.com

 

Modern Android Development 는

 

 

Android팀에서 권장하는 개발 도구, API, 언어, 배포 기술을 통해 개발자는 생산성을 높이고 수많은 기기에서 실행되는 더 나은 앱을 만들 수 있습니다.

라고 안드로이드 디밸로퍼에 서술되어 있다.

 

근데 그래서 이게뭔데? 

쉽게 얘기하면 안드로이드 앱 번들 + 제트팩 + 코틀린 + 안드로이드 스튜디오를 합쳐서 일컫는 말이다.

오늘부터 포스팅할 내용은 앱 번들을 제외한 안드로이드 모던 디밸로퍼의 모든 내용들을 공부할 것이다.

코틀린과 안드로이드 스튜디오는 사실 필수이고, 주된 내용은 제트팩에 관한 얘기일 것이다.

 


2.Architecture Pattern

제트팩에 관해 공부하기전에 우리는 아키텍쳐 패턴에 관하여 알 필요가 있다.

아키텍쳐 패턴은 디자인 패턴의 상위 개념이라고 말할 수 있다.혹시나 아키텍쳐 패턴, 디자인 패턴이 무엇인지 모르는 사람들을 위하여 간단하게 서술하자면

 

주어진 상황의 소프트웨어 구조에서 발생하는 문제점을 해결하기 위한 일반화된 재사용 가능한 솔루션

정도로 정의할 수 있다. 대표적인 아키텍쳐 패턴으로는

계층화패턴, 마스터-슬레이브 패턴, 파이프-필터 패턴,브로커 패턴 등 엄청나게 많지만 

모바일 환경에서는 대표적으로 3가지가 있다.

 

1)MVC

Model + View + Controller

  • Model  어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
  • View    사용자에게 보여지는 부분 (UI)
  • Controller 사용자의 입력을 받고 처리하는 부분

MVC 패턴의 장점은 널리 사용되고 있는 패턴이라는 점에 걸맞게 가장 하다. 보편적으로 많이 사용되는 디자인패턴이다.

MVC 패턴의 단점은 View와 Model 사이의 의존성이 높다는 것이다. View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어려워 진다.

 

2)MVP

Model + View + Presenter

  • Model       어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
  • View         사용자에서 보여지는 UI 부분
  • Presenter  View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분

MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것이다.

반면에 View와 Presenter 사이의 의존성이 높아 지는 단점이 있다.

 

 

3)MVVM

 Model + View + View Model

  • Model  어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분
  • View    사용자에게 보여지는 UI
  • View Model : View를 표현하기 위해 만든 View를 위한 Model

사실 MVVM 모델에서 아직도 제대로 이해하고 있는지 애매한 부분이 뷰 모델이다. 뷰란? 사용자에게 보여지는 UI 근데 사용자에게 보여지는 UI를 표현하기 위해 만든 뷰를 위한 모델?? 이 부분은 앞으로 공부하면서 차차 해결해 나가리라 생각한다.

 

 

 

MVVM 패턴은 Command 패턴과 Data Binding 두 가지 패턴을 사용하여 구현,View와 Model 사이의 의존성이 없다.

 View Model 사이의 의존성 또한 없앤 디자인패턴입니다. 각각의 부분은 독립적이기 때문에 모듈화 하여 개발가능하지만

MVVM 패턴의 단점은 View Model의 설계가 쉽지 않다는 점이 큰 단점이다.

 


3.Support Library

지원 라이브러리  |  Android 개발자  |  Android Developers

 

지원 라이브러리  |  Android 개발자  |  Android Developers

지원 라이브러리 참고: Android 9.0(API 수준 28)의 출시와 함께 Jetpack의 일부인 새로운 버전의 지원 라이브러리 AndroidX가 제공됩니다. AndroidX 라이브러리는 기존 지원 라이브러리를 포함하며 최신 Jetp

developer.android.com

지원 라이브러리는 몇 가지 뚜렷한 용도가 있습니다. 플랫폼의 이전 버전에 대한 하위 호환성 클래스는 그중 하나입니다. 

 

 

 

라고 안드로이드 디밸로퍼에 서술되어 있다. 쉽게 설명하면 api버전이 낮아서 지원 하지 않는 신규 기능도 지원 라이브러리를 통해서 쓸 수 있는것이다. 대표적으로 리사이클러뷰가 있다.

여기까지만 들으면 굉장히 좋은건데 이게 왜? 라고 할 수 있다. 이 지원라이브러리의 가장 큰 문제는 17년 구글에서 발표한What's new in Android Support Library에 따라 api버전 14부터 지원하게 되면서 문제가 커졌다. 

What's new in Android Support Library (Google I/O '17) - YouTube

지원 라이브러리를 임포트하다보면implementation com.android.support:appcompat-v7 ~~ 뭐 이런식으로 v가 붙은게 있다.이게 무슨뜻이냐? api 7부터 지원 가능하다는 뜻이다.근데 구글측에서 너무 오래된 기기의 사용을 막으려고 적혀진 버전과 상관없이 api 14부터 지원하게 된것이다.지원 라이브러리는 많은 라이브러리가 통합되어있기에 내가 사용하지 않는 기능도 포함된다. 이는 굉장히 비효율적이다.

 

이러한 비효율을 해결하기 위해,안드로이드 지원 라이브러리를 안드로이드 익스텐션 라이브러리로 바꿈과 동시에 제트팩을 도입하게 된다.

(38) Android Jetpack: What’s new in Android Support Library (Google I/O 2018) - YouTube

(38) Android Jetpack: What’s new in Android Support Library (Google I/O 2018) - YouTube

주요 내용은 기존에는 a가 업데이트 되어도 전체를 업데이트 해야했지만 이제는 a만 업데이트가 가능하다.

내용 자체가 워낙 방대하고 나도 다 몰라서, 동영상 보기를 추천한다.

 


4.Android JetPack

그래서 제트팩이 뭔데?

드디어 오늘 얘기할 본 내용이다.

 

Jetpack은 개발자가 관심 있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 축소, 모든 Android 버전 및 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 모음입니다.

 

사실 이렇게 얘기하면 알 수 없다. 오늘부터 안드로이드 디밸로퍼 다큐멘테이션을 따라서 하나하나 이것이 무엇인지 알아가보려고 한다.


참고

Android Jetpack 시작하기  |  Android 개발자  |  Android Developers

 

Android Jetpack 시작하기  |  Android 개발자  |  Android Developers

Jetpack에 기반해 간단한 앱을 빌드하는 방법을 알아보세요.

developer.android.com

Support library와 Androidx와 Jetpack::Android Studio에서 Kotlin으로#39 - YouTube

Support Library와 Androidx와 Jetpack (cliearl.github.io)

 

Support Library와 Androidx와 Jetpack

Support Library Support Library의 필요성 구글에서는 Android API의 하위 호환성 문제를 해결하기 위해 Support Library를 만들었습니다. 예를들어 롤리팝(API 21)부터 도입된 RecyclerView는 API 21 이하의 기기에서

cliearl.github.io

 

+ Recent posts