코틀린 기반으로 쓰여짐


1) 제트팩?

Android Jetpack is a set of components, tools and guidance to make great Android apps. The Android Jetpack components bring together the existing Support Library and Architecture Components and arranges them into four categories:

Android Jetpack은 훌륭한 Android 앱을 만들기 위한 구성 요소, 도구 및 지침 세트이다. Android Jetpack 구성 요소는 기존 지원 라이브러리 및 아키텍처 구성 요소를 결합하여 다음과 같은 네 가지 범주로 나뉩니다. 

  1. Architecture
  2. UI
  3. Foundation
  4. Behavior

 

 

https://android-developers.googleblog.com/2018/05/use-android-jetpack-to-accelerate-your.html

 

2) AAC?

AAC(Android Architecture Components)는 jetpack에서 Architecture에 해당하는 부분으로 테스트와 유지보수가 쉬운 안드로이드 앱을 디자인할 수 있도록 돕는 라이브러리 모음이다.

AAC를 활용하면 현재 구글에서 권장하는 MVVM 구조로 앱 설계가 가능해진다.
다음은 앱 아키텍쳐 가이드의 권장 구조의 도식도이다.

위 그림을 참고해서 보면 알겠지만 아키텍쳐파트에는 데이터 바인딩 라이프사이클 라이브데이타 네비게이션등이 있다.

오늘 우리는 아키텍쳐에 대해 본격적으로 공부하기 전 뷰 바인딩이라는것을 먼저 배워보려고 한다.

 

3) Viewbinding?

쉽게 얘기하면 findviewbyid를 쓰지 않고 XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식이다. object는 자동으로 만들어진다

3-1) 왜 써야해?

기본적으로 id는 같을 수 있다. findviewbyid 를 통하여 접근하게 되면 같은 id가 있다는 가정이면 어떤 id에 접근하는건지 명확하지 않다. 이를 방지하기 위하여 쓴다.또 레이아웃에 없는 id를 접근하게 될 때 nullsafe를 보장해준다.

 

3-2) 어떻게 써야해?

1)모듈 수준의 gradle 을 수정한다.

 

사용하고 있는 안드로이드 스튜디오 버전이 4.0 이상

buildFeatures {
        viewBinding true
    }

3.6 이상 4.0 미만

viewBinding {
        enabled = true
    }

사실 뭘 해도 둘다 적용되는걸로 보아 상관 없는거같다. 그래도 알고는 있자

 

2)액티비티에서 사용해보기

private lateinit var binding: ActivityMainBinding

 

 

참고로 액티비티 이름따라서 자동으로 만들어진다. 내 액티비티 이름이 mainActivity라 AcitivtyMainbinding인것이다. 이름 맞춰서 써주면 된다.

 

 

2-1)

원래는 R.layout.activity_main을 넘겨주지만 이번에는 우리가 생성한 루트 뷰를 넘겨준다

 

binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

 

 

2-2) 사용해보기

binding.fab.setOnClickListener { view ->
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
        }

위 코드는 리스너를 달아본것이다.

 

3)프레그먼트에서 사용해보기

class FirstFragment : Fragment() {

    private var _binding: FragmentFirstBinding? = null

    // This property is only valid between onCreateView and
    // onDestroyView.
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        _binding = FragmentFirstBinding.inflate(inflater, container, false)
        return binding.root

    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.buttonFirst.setOnClickListener {
            findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

 

사실 액티비티랑 크게 다를건 없다.

 

 

 

우리가 하나 주목해봐야 할건 _binding 과 binding이 왜 두개나 있냐는건데

_binding은 우리가 사용하지 않을 때 자원을 null 값으로 만들어 주기 위해서 존재하는 것이다.

그니까 nul을 위해 존재 하는값임.

 


참고

안드로이드 뷰 바인딩(view binding) (tistory.com)

 

안드로이드 뷰 바인딩(view binding)

1. 뷰 바인딩  1-1. 라떼는 말이야...  1-2. 변천사  1-3. findViewById와의 차이점 2. 사용법  2-1. gradle 추가  2-2. 액티비티  2-3. 프래그먼트  2-4. viewBindingIgnore 1. 뷰 바인딩 1-1. 라떼는 말..

todaycode.tistory.com

 

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

코틀린 기반으로 쓰여짐


 

 

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