728x90
안드로이드에 있어 전반적인 것을 배울 수 있었다.
또한 아키텍처 패턴 MVC, MVP에 대해 이해할 수 있었다.
4대 컴포넌트에서는 Activity만 미션에 녹여낼 수 있었다.
1. 안드로이드 기초 (영화: 티켓 예매)
안드로이드의 기초인 Activity, 화면 등에 대해 알 수 있었다.
이외에도 도메인 모듈을 분리하는 방법을 배웠다.
- Activity
- Intent
- Context
- 애플리케이션의 실행 문맥(Context)에 대한 정보를 제공하고 시스템 서비스와 애플리케이션의 리소스에 접근할 수 있게 함. 예를 들어 Activity, Service, Broadcast Receiver 등에서 Context로 리소스를 참조할 수 있다.
- Application Context vs Activity Context
무조건 Application Context를 활용하면 안되는 이유가 뭘까?
Application Context가 지원하지 않는 기능은 없을까?
생명주기에 의존적인 Context를 활용하는 것이 적절할 때는 언제일까?
- LifeCycle
- Activity LifeCycle
- View LifeCycle
- Fragment LifeCycle
- View 컴포넌트
- View: 하나하나의 개별 UI 요소
- View Widget: View의 하위 클래스, 미리 설계된 UI 요소
- ViewGroup: View의 하위 클래스, View를 묶는 컨테이너
- Date → LocalXXX: 변경이 가능해 유지보수에 불리하다. Data라는 이름에 시간 정보까지 가지고 있어 혼동될 수 있다.
- Serializable vs Parcelable
- Serializable은 내부 구현에 리플렉션을 사용하여 이를 해결하기 위해 Parcelable이 나오게 되었다.
- dp vs sp
- dp: View의 크기를 지정할 때 사용. px을 사용할 경우, 화소수에 따라 View의 크기가 다르기 때문.
dp는 160dpi를 기준으로 화소수에 맞추어 적정 크기로 잡는다. 즉, 기기별 대응에 용이 - sp: 글자의 크기를 지정할 때 사용. 안드로이드 시스템 설정에 따른 글자 크기 변경에 대응되기 때문.
- dp: View의 크기를 지정할 때 사용. px을 사용할 경우, 화소수에 따라 View의 크기가 다르기 때문.
- 화면 회전시 데이터 유지
- 화면이 회전될 때 뷰의 구성요소는 다시 그려진다. 때문에 런타임에 뷰에 변경사항이 있을 경우 변경사항이 사라진다.
SavedInstanceState
https://developer.android.com/guide/topics/resources/runtime-changes?hl=ko
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko#asem
- 화면이 회전될 때 뷰의 구성요소는 다시 그려진다. 때문에 런타임에 뷰에 변경사항이 있을 경우 변경사항이 사라진다.
2. 안드로이드 심화 (영화: 극장 선택)
- Fragment
- 트랜잭션
- Fragment에 추가할 변화에 대한 집합.
- FragmentManager를 통해 add, remove, replace 등의 작업을 수행할 수 있음.
transaction을 적용시키기 위해 commit을 사용해야 함.
commit은 main ui thread에 transaction이 가능할 때 scheduled이 됨.
- add + hide + show / replace
- replace: 한 화면에 하나의 프레그먼트가 보이고, 해당 프래그먼트와 같은 위치에서 프래그먼트가 변경되는 상황
- add + hide + show: 한 화면에 fragment가 여럿 보일 때, 상황에 따라 일부 화면의 fragment가 보이거나 보이지 않아야하는 상황
- 트랜잭션
- Broadcast Receiver
- MVP
- MVC: Model(및 도메인 로직)과 View(입출력 등)을 중재하는 Controller.
그러나 안드로이드에서는 View(Activity)가 앱의 진입점(Controller)의 역할도 하고 있어 생긴 것이 MVP - MVP: 안드로이드식 MVC. Activity(View)로부터 필요한 것을 전달받아 사용.
- MVC: Model(및 도메인 로직)과 View(입출력 등)을 중재하는 Controller.
- Test Double
- Unit Test
- 실제 실행해 테스트하는 것보다 정확, 추적 용이, 확장 용이, 시간 효율 증가
- Domain Test
- Presenter Test
- UI Test (Espresso, Robolectric)
- Databinding
- ListView와 RecyclerView
- RecyclerView를 권장하는 이유: list item view 재사용 강제 (ListView도 재사용 가능), 아이템 추가 삭제 시간 효율이 좋음, LayoutManager를 지원해 가로로 표시하거나 한 줄에 두개씩 표현하는 등의 커스텀이 용이
3. 데이터 로딩, 상태 관리 (장바구니: 로컬)
- 페이지네이션
- 무한 스크롤
- 복잡한 상태 관리 (LiveData)
- List (concat / view type / nested)
- concat
- 두개 이상의 리스트를 순차적으로 연결시킬 때 사용한다. 하나의 어댑터에서 여러 어댑터를 관리할 필요가 없어지므로 분리가 명확해지고 관리가 용이해진다.
- ConcatAdapter.Config와 내부 동작에 대한 이해가 부족한 채로 사용하면 예상치 못한 부수 효과가 있을 수 있다.
- concat
-
- view type
- 하나의 리스트에서 다른 생김새의 item을 사용할 경우 view타입을 이용한 방법이 적절하다.
- 여러 리스트를 View Type으로 구분해 구현할 경우 관리가 불편해 변경에 불리하다.
- nested
- 구현이 간단하다.
- 아이템의 재사용이 불가하다. 서버로부터 값을 가져올 때는 어느정도의 데이터가 들어올지 알 수 없기 때문에 아이템이 많을 수 있어 부적절하다.
- view type
4. 협업, 비동기 (장바구니: 협업)
- REST API
- HTTPS
- ...
추가로 정리해야할 부분
- findViewById, ViewBinding, DataBinding
findViewById, ViewBinding의 동작구조 차이 - customView 만들기
- ui test
- 프로세스 (구조, 동작 방식 등)
- intent할 때는 프로세스가 달라 데이터로 저장, sharedprefernce는 어디서든 저장하고 가져다쓰는게 가능 ( ??? 왜지 )
https://github.com/woowacourse/android-movie-theater/pull/9#discussion_r1179001464
- intent할 때는 프로세스가 달라 데이터로 저장, sharedprefernce는 어디서든 저장하고 가져다쓰는게 가능 ( ??? 왜지 )
728x90
'우아한테크코스 5기 > 정리' 카테고리의 다른 글
레벨 4 미션 정리 (0) | 2023.11.01 |
---|---|
레벨 3, 레벨 4 팀 프로젝트 총정리 (0) | 2023.10.29 |
우아한테크코스 5기 모바일 레벨1 총정리 (0) | 2023.04.08 |
[git] origin에 merge된 브랜치에서 추가로 진행된 commit 이동하기 (4) | 2023.02.27 |
[kotlin][JUnit5] TDD (Test Driven Development, 테스트 주도 개발) (0) | 2023.02.21 |
댓글