안드로이드 개발 트렌드
프로젝트를 시작하면서 안드로이드 최신 개발 트렌드에 대해 공부를 했다.
2022년 새롭게 출시된 Android 13과 Material 3, 이번에 사용하게 될 Kotlin에 대해 정리를 했고, 2022년 안드로이드 개발 트렌드인 Jetpack Compose, Hilt, Kotlin Flow, Coroutines까지 프로젝트 개발 관점에서 알아볼 것이다.
Android 13(API 33)
안드로이드의 13번째 릴리즈 버전이다. (코드명: Tiramisu)
주요 기능
테마 앱 아이콘
이 기능을 사용하기 위해서는 적응형 아이콘과 단색 앱 아이콘을 제공해야 한다.
Android 13부터 테마 앱을 선택할 수 있다. 사용자가 선택한 배경화면 및 기타 테마의 색상을 상속받도록 색상이 조정된다.
색상 벡터 글꼴
쉽게 말해서 이모티콘과 같은 이미지들을 위해 개선이 된 것이다.
Android 13부터 시스템에서는 COLR 버전 1(COLRv1) 글꼴의 렌더링 지원이 포함되고 시스템 이모티콘이 COLRv1 형식으로 업데이트 된다.
COLRv1은 모든 크기에서 빠르고 선명하게 렌더링 되는 매우 작은 글꼴 형식이다.
스플래시 화면
효율성 개선기존에는 스플래시의 애니메이션의 지속 시간을 직접 설정해주었지만, 이제는 시스템에서 애니메이션 지속 시간을 추측해 띄워준다.
Android 13에서 Splash Screen API에서 애니메이션 스플래시 화면의 효율성을 개선했다.
사진 선택 도구
이전에는 앱에서 사진을 선택하는 기능을 호출할 때 미디어 라이브러리에 접근할 수 있는 권한을 부여했다.또한 앱에 표준화된 내장 UI를 제공해서 일관성이 높아지게 된다.
하지만 이제는 앱과 공유할 특정 이미지와 동영상에만 엑세스 권한을 부여해 개인 정보 보호를 강화할 수 있게 된다.
Android 13 이상에서 사진 선택 도구 환경이 포함되어 있다.
태블릿 및 대형 화면 지원
Android 13은 시스템 UI 최적화, 향상된 멀티태스킹, 개선된 호환성 모드 등 Android 12 및 12L 기능 출시에서 도입된 태블릿 최적화를 기반으로 빌드 되었다.
Material Design 3
구글이 제창하여 2014년부터 이용되기 시작한 플랫 디자인 기반의 디자인 시스템이다.
기존의 안드로이드(~ API 20) UX는 iOS에 비해 너무 밋밋하고 통일되지 않는 디자인이라는 의견이 많았다. 따라서 구글에서 통일성 있는 사용자 경험을 제공하고자 개발되었다.
미니멀리즘을 추구하여 기존의 플랫한 디자인에 입체감과 원근감을 주는 방향으로 개발되었다.
특징
기존의 플랫한 2차원적인 평면 느낌에서 그림자와 깊이같이 3차원의 개념이 추가가 된 것이다.
깔끔하게 딱 필요한 만큼의 시각적 정보와 미적 요소를 제공하는 Material 디자인은 UI 디자인의 교과서로 쓰인다.
컬러 팔레트
Material Design에서 제공하는 컬러 팔레트가 있다.
컬러 툴 사이트나 Material Builder 사이트를 활용하면 어플의 전체적인 색상 느낌을 볼 수 있다.
아이콘
Material Design에서 오픈소스로 제공한다.
Google Fonts 사이트에서 Material Design 테마의 아이콘을 받을 수 있다.
그 외 Material Design을 적용해서 어떤 디자인과 애니메이션, 기능을 구현해야 하는지는 Material Design 사이트를 참고하면 된다.
Kotlin
IntelliJ IDEA의 개발사 JetBrains에서 2011년에 공개한 오픈 소스 프로그래밍 언어이다.
JVM 기반의 언어이며, 자바와 유사하지만 더 간결한 문법과 다양한 기능을 추가했고, 상호 운용이 100% 지원된다. JVM 바이트 코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 컴파일할 수 있다.
2017년에 구글이 안드로이드의 공식 언어로 Kolin을 추가하면서 안드로이드를 개발하기 위해서는 Kotlin이 필수 항목이 되었다.
특징
- 장황했던 Java와 비교하면 눈물날 정도로 간결한 문법을 제공한다. 간결한 문법을 제공하면서도 런타임 오버헤드가 거의 없다.
- 오버헤드 없는 널 안전성을 제공한다. Kotlin의 변수는 Nullable(널 값 사용 가능)과 NotNull(널 값 사용 불가)로 나뉘는데, 변수 선언 시 '?'를 붙여 Nullable로 만들 수 있다. Swift에서도 유사한 기능을 쓰는데 Kotlin 쪽이 제약이 좀 덜해서 사용하기 편하다.
- 예외처리를 강제하지 않는다. JSON Object를 만들 때 눈물이 난다...
- 모든 함수가 리턴값을 가진다.
- Java의 'Integer'나 'Double'처럼 primitive type을 위한 별도의 wrapper class가 존재하지 않는다. 모든 primitive type은 객체 취급을 받는다. 따라서 Int 같은 변수는 객체에 할당된 toString 함수 등을 바로바로 이용할 수 있다.
- 확장함수, 연산자 오버로딩을 지원한다.
- API 문서에 Java의 HTML 대신 Markdown을 사용한다.
- ==, != 연산자가 객체의 identity가 아닌 내용물을 비교한다.Java에서는 String i와 String j가 같은 문자열을 담고 있어도 가리키는 객체의 메모리 주소는 다를 수 있으므로 i == j는 false가 될 수 있다. 따라서 객체의 내용물을 비교하려면 equals() 함수를 사용해야 한다. 하지만 Kotlin에서 ==는 equals()와 똑같이, 즉 content equality로 작동한다. 따라서 i == j는 true다. Java처럼 identity equality를 비교하려면 ===, !==를 쓰면 된다.
- static 메서드가 없다. companion object를 사용해 감싸야 한다. Java 코드에서 접근하려면 '클래스명.Companion.메서드_혹은_get변수명()' 또는 @JvmStatic annotation을 쓰면 된다.
- Java 8에 호환된다.
- Java와의 상호 운용이 100% 지원된다.
- 자바와 달리 부모클래스로부터 상속을 바로 받을 수 없다. open 키워드가 붙은 부모클래스로부터만 상속을 받을 수 있다.
- 코루틴을 지원한다.
2022년 안드로이드 개발 트렌드
1. Jetpack Compose
Jetpack Compose는 SwiftUI, Flutter와 같은 선언형 UI이다.
기존의 Android의 XML이나 iOS의 StoryBoard로 작성하는 방식은 **“특정 상태에 따라 UI가 어떻게 보여질지에 대해 구현”**해야했다면, Jetpack Compose와 같은 선언형 UI는 이와 반대로 **“특정 상태에 따라 UI가 무엇을 보여주면 되는지에 대해 구현”**하면 되는 것이다.
장점
상태에 따른 UI 를 작성하기 위해 훨씬 적은 코드를 사용합니다.
뷰 계층의 트리를 탐색 (view.findViewById() 등) 하여 수동으로 조작하는 기존의 방식보다 실수할 확률이 적고, 유지보수적 측면에서 좋습니다.
기존 언어의 유연성을 그대로 활용할 수 있습니다.
개발자가 뷰의 속성 등의 구현을 경우에 따라 상세하게 작성하지 않아도 되므로 재사용, 확장성에 용이합니다.
2. HILT
Hilt는 가장 인기있는 도구인 Dagger를 기반으로 구축된 새로운 의존적 주입(dependency injection) 도구이다. Android를 위해 특별히 구축되었고, 뷰 모델, Activities, Fragments, Jetpack Compose까지도 Hilt를 지원한다. Dagger와 비교하면, 구성은 매우 간단하고 오류들도 더 분명해서 의존성 주입과 관련한 경험이 적은 사람들조차도 꽤 쉽게 이해할 수 있습니다.
3. Kotlin Flow
Kotlin Flow는 비동기적으로 계산된 여러 값들을 반환할 수 있는 방법이다.
RxJava와 유사한 많은 연산자들을 보유하고 있지만, 매우 단순한 디자인을 유지하고자 노력하고 있다.
4. Coroutines
Coroutine은 동시성 프로그래밍 개념을 코틀린에 도입한 것이다. 비동기 처리 방식 중 하나이고 안드로이드 개발에 가장 많이 쓰인다.
Java를 사용해서 안드로이드를 개발하면 비동기 프로그래밍은 AsyncTask나 RXJava를 사용하였지만, Kotlin으로 넘어오면서 RXKotlin과 Coroutines를 사용한다.
참고
https://developer.android.com/about/versions/13/features?hl=ko
'안드로이드 개발 이야기' 카테고리의 다른 글
토스 앱 분석기 (UX 심리학, 모션 등등 토스같은 앱 개발을 위한 추천 안드로이드 라이브러리) (0) | 2023.06.25 |
---|---|
선언형 UI(Declarative UI) (1) | 2023.05.14 |
개발자 관점에서 바라본 좋은 UI / UX 디자인이란? (0) | 2023.03.18 |
반응형 UI 만들기 (0) | 2023.01.22 |