#12 [Kotlin] 제트팩, androidx

정상준·2022년 10월 29일
0

kotlin

목록 보기
12/26
post-thumbnail
post-custom-banner

📝제트팩과 androidx

구글에서 안드로이드 앱을 개발하는데 필요한 다양한 라이브러리 모음을 제트팩이라는 이름으로 제공한다.

제트팩은 안드로이드 플랫폼이 기본으로 제공하는 플랫폼 API외에 따로 추가된 라이브러리이다.

📝플랫폼 API

ART에서 제공하는 안드로이드 앱의 핵심 라이브러리로 대부분 android나 java로 시작하는 패키지명을 사용한다. 안드로이드 앱은 런타임 때 ART에 의해 실행되므로 ART에서 제공하는 플랫폼 API를 이용해 개발한다. 그런데 플랫폼 API를 이용하면 사용자 기기의 버전과 달라 호환성 문제가 발생할 수 있다. 또한 플랫폼 API는 기본 재료일 뿐 실제 앱을 개발할 땐 더 다양한 기능이나 화면을 구현해야 하므로 구글은 2018년 제트팩이라는 라이브러리 모음을 발표했다.

제트팩은 androidx로 시작하는 패키지명을 사용한다.

📝제트팩은 크게 다음 3가지 목적으로 제공한다.

  • 앱을 개발하는데 필요한 권장 아키텍처를 제공한다.
  • API 레벨의 호환성 문제를 해결한다.
  • 플랫폼 API에서 제공하지 않는 다양한 기능을 제공한다.

제트팩은 다양한 아키텍처를 제시하며 이를 위해 뷰 모델, 라이브 데이터, 룸, 페이징 등과 같은 라이브러리를 제공한다.

📝제트팩에는 androidx라는 패키지명으로 시작하는 다양한 라이브러리가 있는데 화면 구성과 관련된 라이브러리는 다음과 같다

  • androidx.appcompat : 앱의 API 레벨 호환성을 해결한다.
  • androidx.recyclerview : 목록 화면을 구성한다.
  • androidx.viewpager2 : 스와이프로 넘기는 화면을 구성한다.
  • androidx.fragment : 액티비티처럼 동작하는 뷰를 제공한다.
  • androidx.drawerlayout : 옆에서 서랍처럼 열리는 화면을 구성한다.

📝appcompat

appcompat 라이브러리는 안드로이드 앱의 화면을 구성하는 액티비티를 만들며 API레벨의 호환성 문제를 해결해 준다. appcompat 라이브러리를 사용하려면 그래들 파일의 dependencies 항목(의존성 설정)에 다음처럼 선언해야 한다. 그런데 이 선언은 안드로이드 스튜디오에서 모듈을 만들 때 자동으로 추가된다.

implementation 'androidx.appcompat : appcompat : 1.3.1'

appcompat 라이브러리를 이용해 액티비티를 만들 때 플랫폼 API의 Activity가 아니라 다음처럼 appcompat의 AppCompatActivity 클래스를 상속받아 작성해야한다.

import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity(){
}

📝액션바

액티비티의 구성 요소인 액션바는 화면 위쪽에 타이틀 문자열이 출력되는 영역을 의미한다. 액티비티가 출력되는 전체 창은 액션바와 콘텐츠 영역으로 구분된다.

액션바의 색상은 앱에 자동으로 적용되는 테마에서 결정된다.

테마 스타일은 res/values 디렉터리에 있는 themes.xml 파일에 선언되어 있다.

colorPrimary와 colorSecondary는 앱의 브랜드를 표현하는 색상으로 colorPrimary는 액션바와 버튼의 배경색으로 사용하고 colorSecondary는 활성 상태를 표현한다. statusBarColor는 상태바의 배경색으로 사용한다.

📝업 버튼 설정

업 버튼은 액티비티 화면이 앱의 첫 화면이 아닐 때 이전 화면으로 돌아가는 기능이다.

업 버튼은 액티비티가 등록되는 매니페스트 파일에서 설정하는 방법과 액티비티 코드로 설정하는 방법이 있다.

/*매니페스트 파일에서 업 버튼 설정*/
<activity
    android:name=".TwoActivity"
    android:parentActivityName=".MainActivity"></activity>

/*액티비티 코드에서 업 버튼 생성*/
class TwoActivity : AppCompatActivity(){
   override fun onCreate(savedInstanceState: Bundle?){
   
   supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}

📝메뉴구성

메뉴는 액션바의 중요한 구성 요소로 액티비티 화면에서 사용자 이벤트를 사용할 수 있도록 한다. 액티비티에 메뉴를 추가하면 액션바 오른쪽에 오버플로 버튼이 나타나며 그 중에 몇몇은 액션바에 아이콘으로 나오게 할 수 있다. 이를 액션 아이템(액션 버튼)이라고 한다.

액티비티에 메뉴를 추가하고 싶다면 onCreateOptionsMenu()와 onPrepareOptionsMenu() 함수를 이용한다. 두 함수의 차이는 호출되는 시점으로 onCreateOptionsMenu()는 액티비티가 실행되면서 한 번 호출된다. onPrepareOptionsMenu() 함수는 액티비티가 실행되면서 한 번 호출된 후 오버플로 메뉴가 나타날 때마다 반복해서 호출된다.

📝액션 뷰

액션 뷰는 액션바에서 특별한 기능을 제공하며 대표적으로 androidx.appcompat.widget.SearchView가 있다. 서지뷰는 액션바에서 검색 기능을 재공한다.

<item android:id="@+id/menu_search"
      android:title="search"
      app:showAsAction="always"
      app:actionViewClass+"androidx.appcompat.widget.SearchView"
/>

📝툴바

툴바를 사용하는 목적은 액션바와 같지만 액션바는 액티비티 창이 자동으로 출력하는 액티비티의 구성요소지만 툴바는 개발자가 직접 제어하는 뷰라는데 차이점이 있다.

📝프래그먼트

프래그먼트는 텍스트 뷰나 버튼처럼 액티비티 화면을 구성하는 뷰인데 그 자체만으로는 화면에 아무것도 출력되지 않는다. 프래그먼트가 다른 뷰와 다른 점은 액티비티처럼 동작한다는 것이다.

프래그먼트는 태블릿처럼 화면이 넓은 기기에서 동작하는 앱을 개발할 수 있도록 제공되었다.

프래그먼트는 androidx.fragment 라이브러리에서 제공한다.

프래그먼트의 생명주기는 크게 5단계로 나뉜다. 초기화, 생성, 시작, 재개, 소멸단계로 구분된다.

초기화 단계는 프래그먼트의 화면을 구성할 뷰가 준비되지 않은 상태이다.

생성 단계에서는 프래그먼트의 화면을 구성할 뷰를 준비한다.

시작 단계는 프래그먼트 화면이 사용자에게 보이며 대개 단계에서는 포커스를 가지고 사용자의 이벤트를 처리할 수 있다.

다른 프래그먼트로 교체될 때 백 스택을 사용한다면 화면에 보이지 않는 순간 제거하지 않고 저장했다가 다시 이용할 수 있는 기능이다.

📝리사이클러 뷰

리사이클러뷰는 목록 화면을 만들 때 사용한다. 리사이클러 뷰는 목록을 만드는데 RecyclerView 클래스만으로는 화면에 아무것도 출력되지 않는다. 그러므로 다음과 같은 구성 요소를 이용해야 한다.

  • ViewHolder(필수) : 항목에 필요한 뷰 객체를 가진다.
  • Adapter(필수) : 항목을 구성한다.
  • LayoutManager(필수) : 항목을 배치한다.
  • ItemDecoration(옵션) : 항목을 꾸민다.

뷰 홀더 : 각 항목을 구성하는 뷰 객체를 가진다.

어댑터 : 뷰 홀더에 있는 뷰객체에 적절한 데이터를 대입해 항목을 완성한다.

리사이클러 뷰 : 레이아웃 매니저가 어댑터가 만든 항목들을 어떻게 배치할지 결정한다.

📝뷰 페이저2

뷰 페이저는 스와이프 이벤트로 화면을 전환할 때 사용한다.뷰 페이저는 플랫폼 API에서 제공하지 않으므로 androidx라이브러리를 이용해 개발해야 한다.

뷰 페이저2를 이용하려면 그래들 파일의 dependencies 항목에 다음처럼 선언해야 한다.

implemention 'androidx.viewpager2:viewpager2:1.0.0'

뷰 페이저2는 화면을 항목으로 본다. 각 항목이 순서대로 나열되어 있는데 단지 한 화면에 항목 하나가 나온다는 개념이다. 따라서 어댑터를 적용해야 한다.

📝드로어 레이아웃

드로어 레이아웃은 액티비티 화면에 보이지 않던 내용이 왼쪽이나 오른쪽에서 손가락의 움직임에 따라 밀려 나오는 기능을 말한다. androidx의 라이브러리인 드로어레이아웃은 마치 서랍처럼 열리는 메뉴를 구성할 때 사용한다.

드로어 레이아웃을 이용하려면 그래들 파일의 dependencies 항목에 다음처럼 선언해야 한다.

implementation 'androidx.drawerlayout:drawerlayout:1.1.1'

DrawerLayout 아래의 뷰를 2개 선언해야 한다. 이렇게 선언만 해주면 자동으로 첫 번째 하위태그 부분을 액티비티 화면에 출력하고 두 번째 하위 태그 부분이 안 보이다가 끌려나온다.

profile
안드로이드개발자
post-custom-banner

0개의 댓글