이번 시간에는 안드로이드 jetpack 라이브러리에 대해 알아보겠습니다.
저번 시간에 디자인패턴에 대해 공부했었는데요.
옵저버패턴과 레포지토리 패턴에 대해 공부하는 시간이 적어
내용이 부실한 것같아 이어서 보충해서 다시설명하겠습니다.
그 다음 jetpack 라이브러리에 대해 알아보겠습니다.
관찰자 패턴은 관찰중인 객체에서 발생하는 이벤트를 여러 다른 객체에 알리는 매커니즘을 설계하는 디자인 패턴 입니다.
주로 다른 객체의 상태가 변경될 때 마다 어떤 이벤트를 실행하고 싶을 때 주로 사용합니다.
예를 들면 유튜브 영상이 올라올 때 구독자들에게 알림이 가는 경우를 생각해볼 수 있습니다.
장점으로는 유연한 객체지향 시스템을 구축하여 객체 사이 상호의존성을 최소화하고,
개방 폐쇄 원칙을 준수하는 장점이 있습니다.
개방 폐쇄 원칙은 확장에는 열려있고 변경에는 닫혀있는 원칙을 의미합니다.
저번 시간에 단점도 중요하다는 피드백을 받았습니다.
단점으로는 관찰자들에게 알림이 가는 순서를 보장할 수 없고,
관찰자들과 관찰 대상의 관계가 잘 정의 되지 않으면 원하지 않는 동작이 발생할 수 있습니다.
저장소 패턴은 Data의 출처에 관계 없이 동일한 인터페이스로 데이터 접근할 수 있도록 하는 디자인 패턴 입니다.
저장소 패턴은 View의 크기가 커지고 로직들이 복잡해지는 것을 방지하기 위해 사용합니다.
MVVM 패턴에서 View Model에서 레포지토리에 접근하는 경우가 그렇다고 볼 수 있습니다.
장점으로는 데이터 레이어에 대한 의존성을 줄여주고 일관된 인터페이스로 데이터를 요청할 수 있습니다.
허나 하나의 데이터 허브를 추가하는 것이기에 관리가 필요한 코드와 파일이 증가합니다.
이건 회사 구인 공고에서 많이 요구하는 사항이라 저번 주제에 포함시킬려고 했었는데,
만들 시간도 부족했고 까먹었습니다.
클린 아키텍처는 추상화 개념으로써 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처 입니다.
기본적으로 종속성 규칙을 준수합니다.
이는 이미지와 같이 코드는 외부에서 내부로 안쪽으로만 가르켜야 합니다.
또한 고 수준(비즈니스)정책이 저 수준(UI)정책의 변경에 영향을 받지 않도록 해야합니다.
그 다음으로는 안드로이드에서 클린 아키텍처를 알아보았습니다.
안드로이드에서는 UI, Domain, Data 레이어의 책임을 지키는 것이라 할수 있습니다.
그리고 화살표는 영향을 받는다라고 생각하시면 될 것 같습니다.
UI의 변경으로 Data가 영향을 받으면 안되지만 Data가 변하면 UI는 영향을 받아야 하는거죠
UI 레이어는 UI elements 와 State holders로 나뉩니다.
UI element는 UI 요소를 생각하시면 되고, State holder는 View Model를 의미합니다.
UI 레이어에서는 다음과 같은 책임을 가집니다.
Damain 레이어는 필수는 아니고 옵션적인 레이어입니다.
또한 Domain레이어에서는 Usecase라는 것을 사용합니다.
Domain레이어에서는 다음과 같은 책임을 가집니다.
마지막으로 Data레이어는 Repositories와 Data Sources로 나뉩니다.
데이터는 레포지토리를 통해서 전달되는 것을 의미하는 것 입니다.
Data 레이어에서는 다음과 같은 책임을 가집니다.
그 다음으로 jetpack을 설명하기전에 AndroidX에 대해 간략히 설명하고 넘어가겠습니다.
기존 라이브러리들은 불필요한 기능까지 포함하여 앱 용량이 커지는 문제가 생겼습니다.
그래서 이 라이브러리들을 하나로 통합한게 AndroidX이고, jetpack은 Android X 라이브러리로 패키지화 되어있습니다.
특징으로는 안드로이드 플랫폼 API와 분리되어 안드로이드 버전에 관계 없이 호환이 가능합니다.
그로 인하여 항상 최신버전 안드로이드 패키지에 접근이 가능하다는 이점이 있습니다.
jetpack은 고품질 앱을 손쉽게 개발할 수 있도록 지원하는 라이브러리, 도구, 권장사항의 모음입니다.
이들을 크게 4가지로 분류할 수 있으며 Architecture, UI, Foundation, Behavior 등이 있습니다.
이 라이브러리들은 엄청 많은 관계로 이번 세미나에서는 몇몇 라이브러리들만 사용할 예정입니다.
먼저 아키텍처관련 jetpack 입니다.
구성요소들은 ppt와 같으며, 이 중에서 저는 Live Data를 사용해보았습니다.
LiveData는 관찰 가능한 데이터 홀더 클래스 입니다.
앞서 말한 관찰자 패턴을 따릅니다.
또한 관찰자 패턴이므로 관찰하여 앱의 구성요소의 수명주기를 고려합니다.
LiveData는 수명주기를 고려하므로 예를들어 액티비티가 파괴되면 관련 리소스가 사라지므로 메모리 누수가 없습니다.
또한 UI와 데이터의 상태 일치를 보장하여, 최신 데이터가 유지됩니다.
그리고 수명주기를 자동으로 처리해줍니다.
이는 수명주기 소유자인 액티비니나 프래그먼트가 비활성 상태이면,
LiveData도 중단되어 불필요한 업데이트를 방지해줍니다.
Viewmodel에서 LiveData를 사용한 예제입니다.
버튼을 클릭할시 LiveData에 있는 데이터가 변경되는데
관찰하고 있어서 데이터의 변경이 감지되면 자동으로 UI가 업데이트 됩니다.'
그 다음으로는 jetpack의 foundation입니다.
구성요소는 ppt와 같고 이 중에서 KTX에 대해 알아보았습니다.
KTX는 기차가 아니고, 안드로이드 jetpack과 기타 라이브러리에 포함된 코틀린 확장 프로그램 세트입니다.
종류는 이와 같습니다
jetpack의 Behavior 입니다.
구성요소는 이러한 것들이 있고, 저는 Notifications을 실습해보았습니다.
알림을 설정하는 코드 입니다.
먼저 인텐트를 정의하여 넘길 변수값이나 알림을 누를시 띄울 화면, 플래그를 설정했습니다.
그 다음 pending Intent 라는 것을 정의했습니다.
이것은 보통 알림은 내 앱에서 누르는 것이 아닌 외부에서 누르는 경우가 많기에
외부에서 눌러도 권한을 얻어서 인텐트를 실행할 수 있게하는 인텐트 입니다.
그래서 pending Intent에 Intent를 담아주었습니다.
그 다음 알림 채널을 정의해주었는데요.
앱들 보면 여러 유형의 알림이 존재하는 경우가 많습니다.
이를 채널로 나누어서 관리하는 것입니다.
그 다음 저번 시간에 배운 빌더패턴을 이용해 알림에 담을 내용을 설정하였고
알람관리자를 통해 알람채널을 만들어주고
알람이 울리게했습니다.
알림이 울리면서 띄울 메세지가 띄울 화면에 전달되었습니다.
해당 코드는 그 메세지 데이터를 받고 텍스트 뷰에 값을 변경해주는 코드 입니다.
알람 예제 결과 입니다.
앱을 실행시 주식 알림이 뜨고 내용이 나옵니다.
이 알람을 클릭하면 알람 관련 상세페이지로 이동됩니다.
마지막으로 UI jetpack과 그 외 구성요소를 가져왔습니다.
UI에서는 액티비티의 자식 뷰인 프래그먼트가 존재하고 다양한 애니메이션, 이모지, 주변기기 라이브러리가 있습니다.
그 외 구성요소에는
액티비티, 컴포즈, 머터리얼 디자인 컴포넌트, 카메라, 힐트등이 있습니다.
내용은 해당 문서를 참고했습니다. 감사합니다.
Architecture, Design, UI(세미나) (2) | 2024.01.29 |
---|---|
Android Studio 및 디버깅 도구 활용(세미나) (0) | 2024.01.18 |
안드로이드 OS와 구성 요소, 생명 주기(세미나) (1) | 2024.01.12 |
안드로이드 공부를 위한 지침 (0) | 2023.12.28 |
안드로이드 문서 저장 방식에 대한 기록 (0) | 2023.07.13 |
댓글 영역