▩ 목 차 ▩
1. 내가 Pokedex 라는 App을 파헤치는 이유
1-1. Pokedex App에서 사용된 기술(Tech Stack & Open-source libraries)
1-2. Pokedex App의 아키텍처
2. 정리
( 사실 코드들이 너무 어려워서 이해하려면 너무나 많은 시간이 투자되거나 혹은 이해할 수 없을 것 같아서 많이 들어본 기술들과 대략적인 문맥을 파악하는것이 목적이다. )
■ 1. 내가 Pokedex 라는 App을 파헤치는 이유 ■
우선 개발자가 가져야하는 덕목은 최신 기술과 트렌드를 잘 파악하여 고객에게 알맞은 니즈를 제공할 수 있어야 한다고 생각한다.
그렇기에 잘하는 사람의 어플을 보고 어떤 기술이 사용이 되었는지를 확인하고, 추후에 만들 프로젝트에 적용시키기 위함이 가장 큰 이유이다. 그렇다면 내가 파헤치려는 App은 무슨 기술을 가지고 있을까 ?
■ 1-1. Pokedex App에서 사용된 기술(Tech Stack & Open-source libraries)
- Coroutines + Flow : 비동기 처리를 위한 것들이다. 프로젝트에서 Coroutines은 사용할 것 같지만 Flow는 사용할 것 같지 않다. Flow는 옛 기술이고 이것을 보완한 SharedFlow, StateFlow가 있는데 이 둘 중에 고민해서 써 볼 생각이다.
- JetPack : 성능이 뛰어난 Android 앱을 만들기 위한 컴포넌트, 도구 및 지침 세트이며, Android 플렛폼에 속하지 않는 별도의 라이브러리로서 제공한다. 그 중에
- Lifecycle : Android 수명 주기를 관찰하고 수명 주기 변경 시 UI 상태를 처리한다. ( 애플리케이션, 액티비티, 프래그먼트, 뷰, 뷰 모델, 프로세스 등의 여러가지 수명주기를 자유자재로 다룰 줄 알게 되는 순간이 안드로이드라는 플랫폼과 어느 정도 친해졌다고 생각할 정도로 중요하다. )
- AAC ViewModel(+LiveData) : UI 관련 데이터 홀더 및 수명 주기 인식을 관리한다. 데이터가 화면 회전고 같은 구성 변경을 유지하도록 허용한다. LiveData는 Data의 변경을 실시간 관찰 할 수 있는 Data Holder 클래스이며, AAC ViewModel은 앱의 Lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하는 역할을 하기 때문에 AAC ViewModel과 LiveData은 항상 같이 쓴다고 보면 된다.
- DataBinding : 프로그래밍 방식이 아닌 선언적 형식을 사용하여 레이아웃의 UI 구성 요소를 앱의 데이터 소스에 바인딩한다.
즉, xml에 코드(값)을 넣게되면 기존의 애기비티에는 로직만을 위한 코드만 남게 되고 뷰와 관련된 작업은 레이아웃 파일에 정의되기 때문에 의존성이 줄어들게 된다. - Room : 외장 DB가 아닌 내장(나만의 어떠한 정보(사용자 정보)를 저장할때) DB이다. SQLite를 쉽게 보완한 내장 DB라고 생각하면 편하다.
- Hilt : 의존성 주입을 위한 용도
- Architecture
- MVVM Architecture( View - DataBinding - ViewModel - Model ) : View와 ViewModel의 의존성을 낮추는 디자인 패턴
- Bindalbes : 데이터 변경 사항을 UI 레이어에 알리기 위한 Android DataBiding 키트이다.
- Repository Pattern : 데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 패턴이다.
- Retrofit2 및 OkHttp3 : REST API 및 페이징 네트워크 데이터를 구성한다.
- Sandwich : Android용 네트워크 페이로드를 처리하기 위한 가볍고 현대적인 응답 인터페이스를 구성한다.
- Moshi : Kotlin 및 Java용 최신 JSON 라이브러리이다.
- Whatif : nullable 개체와 빈 컬렉션을 보다 효율적이게 확인할 수 있다.
- ksp : Kotlin 기호처리 API이다.
- Bundler : 값을 우아하게 삽입하고 검색하는 Android 인텐트 및 번들 확장 프로그램이다.
- Turbine : kotlinx.coroutines Flow용 작은 테스트 라이브러리이다.
- Material-Componets : 잔물결 애니메이션 및 CardView를 구축하기 위한 재료 디자인 구성 요소이다.
- Glide, GlidePalette : 네트워크에서 이미지를 로드한다.
- TransformationLayout : 변형 동작 애니메이션을 구현한다.
- Coustom Views
- Rainbow : Android용 그라데이션 및 색조를 쉽게 적용할 수 있는 방법이다.
- AndroidRibbon : Android에서 반짝이는 아름다운 리본을 구현하는 간단한 방법이다.
- ProgressView : 세련되고 유연한 ProgressView로 애니메이션으로 완벽하게 사용자 정의할 수 있다.
- Timber : 작고 확장 가능한 API가 있는 로거이다.
■ 1-2. Pokedex App의 아키텍처

■ 2. 정리 ■
( 확실히 많은 기술들이 쓰였다. 이 기술들에 대해 전부 알기는 어려울 것이라고 알고 있다. 그래도 최대한 Manifest의 Launcher 액티비티부터 파도타기를 하여 기술들의 의미와 문액을 파악해보겠다 .. )
(1/11일 수정 글)
앱을 파헤쳐본 결과.. 제작자님이 실력이 너무 좋은 나머지 흔히들 우리가 알고 사용하는 함수들을 오버라이딩 하거나 직접 상속을 받아 만들어서 사용을 하셨고, 또한 어노테이션을 직접 만드셨고, Serializable도 사용을 하셨다.
나는 내 현재 수준에서 이렇게 수준높은 앱을 해석하기는 벅찼고.. 앱의 구성 정도만 파악할 수 있었다..
내가 수준이 어느정도 끌어올리면 이 앱의 해석을 다시 도전해보고 싶다. 기다려라...
그래도 이 앱을 해석해보면서 수준높은 앱에서 사용하는 기술들을 무엇이고, 부족한 점(DI, clean architecture 등등)이 무엇인지 파악할 수 있어서 좋은 기회가 된 것 같다.
이번에는 내 수준에 맞는 다른 앱을 찾아 해석할 것을 기약하며 글을 마치겠다.
GitHub - meenjoon/Study_PokedexAPP
Contribute to meenjoon/Study_PokedexAPP development by creating an account on GitHub.
github.com
참고
GitHub - skydoves/Pokedex: 🗡️ Pokedex demonstrates modern Android development with Hilt, Material Motion, Coroutines, Flow,
🗡️ Pokedex demonstrates modern Android development with Hilt, Material Motion, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture. - GitHub - skydoves/Pokedex: 🗡️ Pokedex demons...
github.com
▩ 목 차 ▩
1. 내가 Pokedex 라는 App을 파헤치는 이유
1-1. Pokedex App에서 사용된 기술(Tech Stack & Open-source libraries)
1-2. Pokedex App의 아키텍처
2. 정리
( 사실 코드들이 너무 어려워서 이해하려면 너무나 많은 시간이 투자되거나 혹은 이해할 수 없을 것 같아서 많이 들어본 기술들과 대략적인 문맥을 파악하는것이 목적이다. )
■ 1. 내가 Pokedex 라는 App을 파헤치는 이유 ■
우선 개발자가 가져야하는 덕목은 최신 기술과 트렌드를 잘 파악하여 고객에게 알맞은 니즈를 제공할 수 있어야 한다고 생각한다.
그렇기에 잘하는 사람의 어플을 보고 어떤 기술이 사용이 되었는지를 확인하고, 추후에 만들 프로젝트에 적용시키기 위함이 가장 큰 이유이다. 그렇다면 내가 파헤치려는 App은 무슨 기술을 가지고 있을까 ?
■ 1-1. Pokedex App에서 사용된 기술(Tech Stack & Open-source libraries)
- Coroutines + Flow : 비동기 처리를 위한 것들이다. 프로젝트에서 Coroutines은 사용할 것 같지만 Flow는 사용할 것 같지 않다. Flow는 옛 기술이고 이것을 보완한 SharedFlow, StateFlow가 있는데 이 둘 중에 고민해서 써 볼 생각이다.
- JetPack : 성능이 뛰어난 Android 앱을 만들기 위한 컴포넌트, 도구 및 지침 세트이며, Android 플렛폼에 속하지 않는 별도의 라이브러리로서 제공한다. 그 중에
- Lifecycle : Android 수명 주기를 관찰하고 수명 주기 변경 시 UI 상태를 처리한다. ( 애플리케이션, 액티비티, 프래그먼트, 뷰, 뷰 모델, 프로세스 등의 여러가지 수명주기를 자유자재로 다룰 줄 알게 되는 순간이 안드로이드라는 플랫폼과 어느 정도 친해졌다고 생각할 정도로 중요하다. )
- AAC ViewModel(+LiveData) : UI 관련 데이터 홀더 및 수명 주기 인식을 관리한다. 데이터가 화면 회전고 같은 구성 변경을 유지하도록 허용한다. LiveData는 Data의 변경을 실시간 관찰 할 수 있는 Data Holder 클래스이며, AAC ViewModel은 앱의 Lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하는 역할을 하기 때문에 AAC ViewModel과 LiveData은 항상 같이 쓴다고 보면 된다.
- DataBinding : 프로그래밍 방식이 아닌 선언적 형식을 사용하여 레이아웃의 UI 구성 요소를 앱의 데이터 소스에 바인딩한다.
즉, xml에 코드(값)을 넣게되면 기존의 애기비티에는 로직만을 위한 코드만 남게 되고 뷰와 관련된 작업은 레이아웃 파일에 정의되기 때문에 의존성이 줄어들게 된다. - Room : 외장 DB가 아닌 내장(나만의 어떠한 정보(사용자 정보)를 저장할때) DB이다. SQLite를 쉽게 보완한 내장 DB라고 생각하면 편하다.
- Hilt : 의존성 주입을 위한 용도
- Architecture
- MVVM Architecture( View - DataBinding - ViewModel - Model ) : View와 ViewModel의 의존성을 낮추는 디자인 패턴
- Bindalbes : 데이터 변경 사항을 UI 레이어에 알리기 위한 Android DataBiding 키트이다.
- Repository Pattern : 데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 패턴이다.
- Retrofit2 및 OkHttp3 : REST API 및 페이징 네트워크 데이터를 구성한다.
- Sandwich : Android용 네트워크 페이로드를 처리하기 위한 가볍고 현대적인 응답 인터페이스를 구성한다.
- Moshi : Kotlin 및 Java용 최신 JSON 라이브러리이다.
- Whatif : nullable 개체와 빈 컬렉션을 보다 효율적이게 확인할 수 있다.
- ksp : Kotlin 기호처리 API이다.
- Bundler : 값을 우아하게 삽입하고 검색하는 Android 인텐트 및 번들 확장 프로그램이다.
- Turbine : kotlinx.coroutines Flow용 작은 테스트 라이브러리이다.
- Material-Componets : 잔물결 애니메이션 및 CardView를 구축하기 위한 재료 디자인 구성 요소이다.
- Glide, GlidePalette : 네트워크에서 이미지를 로드한다.
- TransformationLayout : 변형 동작 애니메이션을 구현한다.
- Coustom Views
- Rainbow : Android용 그라데이션 및 색조를 쉽게 적용할 수 있는 방법이다.
- AndroidRibbon : Android에서 반짝이는 아름다운 리본을 구현하는 간단한 방법이다.
- ProgressView : 세련되고 유연한 ProgressView로 애니메이션으로 완벽하게 사용자 정의할 수 있다.
- Timber : 작고 확장 가능한 API가 있는 로거이다.
■ 1-2. Pokedex App의 아키텍처

■ 2. 정리 ■
( 확실히 많은 기술들이 쓰였다. 이 기술들에 대해 전부 알기는 어려울 것이라고 알고 있다. 그래도 최대한 Manifest의 Launcher 액티비티부터 파도타기를 하여 기술들의 의미와 문액을 파악해보겠다 .. )
(1/11일 수정 글)
앱을 파헤쳐본 결과.. 제작자님이 실력이 너무 좋은 나머지 흔히들 우리가 알고 사용하는 함수들을 오버라이딩 하거나 직접 상속을 받아 만들어서 사용을 하셨고, 또한 어노테이션을 직접 만드셨고, Serializable도 사용을 하셨다.
나는 내 현재 수준에서 이렇게 수준높은 앱을 해석하기는 벅찼고.. 앱의 구성 정도만 파악할 수 있었다..
내가 수준이 어느정도 끌어올리면 이 앱의 해석을 다시 도전해보고 싶다. 기다려라...
그래도 이 앱을 해석해보면서 수준높은 앱에서 사용하는 기술들을 무엇이고, 부족한 점(DI, clean architecture 등등)이 무엇인지 파악할 수 있어서 좋은 기회가 된 것 같다.
이번에는 내 수준에 맞는 다른 앱을 찾아 해석할 것을 기약하며 글을 마치겠다.
GitHub - meenjoon/Study_PokedexAPP
Contribute to meenjoon/Study_PokedexAPP development by creating an account on GitHub.
github.com
참고
GitHub - skydoves/Pokedex: 🗡️ Pokedex demonstrates modern Android development with Hilt, Material Motion, Coroutines, Flow,
🗡️ Pokedex demonstrates modern Android development with Hilt, Material Motion, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture. - GitHub - skydoves/Pokedex: 🗡️ Pokedex demons...
github.com