[안드로이드 면접] - 24 :
1. 레포지토리(Reopository) 패턴이란?
데이터의 출처에 관계없이 동일한 인터페이스로 데이터에 접근할 수 있도록 하는 패턴이다.
비즈니스 로직과 데이터 레이어를 분리하기 위해 Data Layer 를 캡슐화 시키는 것이 Repository 패턴의 주된 목적이다.
즉, DataSource 를 캡슐화 한다.
💡 데이터의 출처에 관계없이란? 외부 DB 와 내부 DB 관계없이라고 생각을 하면 될 것 같다.
장점
-> 데이터 로직과 비즈니스 로직을 분리할 수 있다.
-> 도메인에서는 일관된 인터페이스를 통해 데이터를 요청할수 있다.
-> 객체 간의 결합도가 감소한다.
2. SAA (Single Activity Architecture) 란?
하나의 액티비티와 여러 개의 프래그먼트로 구성하여 프로젝트를 설계하는 것을 말한다.
Jetpack 의 Navigation 을 이용하면 쉽게 구조 설계가 가능하다.
장점
-> 메모리나 속도 측면에서 이점이 있다.
-> 액티비티보다 유연한 UI 빌드가 가능하다.
단점
-> 프래그먼트를 기준으로 화면을 작성하는 경우 액티비티만 존재하는 것 보다 훨씬 더 많은 라이프사이클로 인해 제대로 설계하지 못하는 경우 예상하지 못한 방향으로 UI가 진행될 수 있다.
3. SharedPreferences VS SavedInstanceState
딱 정리를 하자면
활동 간에 자주 이동하는 경우, SaveInstanceState 를 사용하고,
정보를 장기간 보관하려는 경우, SharedPreferences 를 사용하면 된다.
Shared Preferences
- 유저 세션이 지나도 데이터가 영속적으로 보관됨. (앱이 죽거나 다시 시작하더라도)
- 유저의 설정이나 게임 스코어와 같이 세션이 지나도 보존되어 있어야 하는 데이터 (즉 저장을 지속적으로 해야 할 경우)
- 일반적으로 유저의 정보를 preference 를 저장하는데 사용한다.
Saved Instance Sate
- 동일한 유저 세션 내에서 액티비티 인스턴스를 영속적으로 저장함.
- 선택된 탭이나 액티비티의 현재 상태와 같이 세션이 끝났을 때에 보존되면 안되는 데이터
- 일반적으로 기기가 회전된 후, 상태를 다시 되돌릴 때 사용한다.
4. Room 와 SharedPreferences 비교
SharedPreferences
- 적은 양의 원시 데이터를 Key-Value 쌍의 형태로 기기 저장공간에 있는 XML 파일로 저장하는 방식이다.
- 주로 사용자 정보를 저장해 놓는다.
Room
- 상당한 양의 구조화된 데이터를 처리하는 애플리케이션의 경우, 데이터를 로컬로 유지하여 큰 이점을 얻을 수 있다.
- 일반적으로 관련 데이터를 캐싱하여 사용한다. 기기가 네트워크 엑세스를 할 수 없을 때, 오프라인 상태인 동안에도 사용자가 여전히 콘텐츠를 사용할 수 있게 만드는 방법.
5. margin start 와 left 비교
언어별 특성 차이로 인해 발생하는 불편을 최소화하기 위해 Start 와 End 를 사용한다.
대부분 문자는 왼쪽에서 오른쪽으로 읽고 쓴다. 이를 LTR 이라고 부른다.
하지만, 일부 언어는 오른쪽에서 왼쪽으로 읽고 쓴다. 이를 RTL 이라고 부른다.
이와 같은 언어별 특성 차이에 오는 혼동을 방지하고자 Start, End 를 사용한다.