🐱 With All My Animal 🐶
💡 [ 25일차 11/13일 ] 💡
📌 오늘의 기술면접 질문 Q&A
1) 디폴트 파라미터에 대해서 설명해주세요(장/단점)
⭐ 장점
- 함수 오버로딩을 줄여준다.
- 같은 이름의 함수를 여러 개 만들지 않고도 다양한 인자 조합으로 함수를 호출 할 수 있기 때문에 코드의 중복을 줄이고 가독성을 향상 시킬 수 있다.
- 유연성을 증가시킨다.
- 함수를 호출하는 쪽에서 필요한 인자만 제공하고 나머지 인자는 디폴트 값으로 사용할 수 있기 때문에 함수 호출이 더 유연해진다.
⭐ 단점
- 가독성을 저해할 수 있다.
- 함수 호출 시, 어떤 인자가 생략되었는지, 어떤 인자가 디폴트 값으로 사용되는지 명확하게 알기 어렵기 때문에 코드를 읽는 사람은 혼란스러울 수있다.
- 잘못된 디폴트 값이 사용될 수 있다.
- 디폴트 파라미터의 값이 잘못 설정되었을 경우, 예상치 못한 동작이나 버그를 발생시킬 수 있기 때문에 디폴트 파라미터의 값을 신중하게 설정하고 관리해야한다.
🚨 인자란?
fun add(a: Int, b: Int): Int {
return a + b
}
fun main() {
val result = add(3, 5)
println(result)
}
🚨 디폴트 파라미터의 예시
fun greet(name: String, greeting: String = "Hello") {
println("$greeting, $name!")
}
fun main() {
greet("Mina", "Hi")
greet("Mina")
}
2) 안드로이드 앱에서 데이터 저장 방법에 대해 설명하세요
🌠 Shared Preferences
- 간단한 키와 값을 쌍으로하여 데이터를 저장하는데 사용된다.
- 사용자의 설정 정보나 간단한 데이터를 저장할 때 주로 사용된다.
- 각 앱마다 독립적으로 저장되며, 다른 앱에서 접근 할 수 없다.
- 사용자의 개인 정보와 같은 데이터를 저장하는데 적합하다.
🌠 Internal Storage
- Android 시스템에서 앱 별로 할당되는 저장공간이다.
- 각 앱은 자신의 Internal Storage 영역에 파일을 생성하고 사용할 수 있다.
- 이 영역의 파일은 해당 앱에서만 접근이 가능하며,다른 앱이 접근 할 수 없는 영역에 데이터를 저장하는 방법이다.
🌠 External Storage
- android 시스템에서 제공하는 추가적인 저장공간을 가르킨다. (내장메모리나 SD카드와 같은 물리적 저장소를 포함 할 수 있다.)
- 공용 영역에 저장하여 다른 앱이 접근 할 수 있도록 하는 방법이다.
- 사용자가 접근 할 수 있고 사진이나 음악처럼 크기가 크고 공유해야하는 데이터를 저장할 때 사용된다.
🌠 SQLite Database
- 안드로이드에서 제공하는 경량 데이터베이스로 복잡한 구조를 가진 데이터를 저장하고 관리할 때 사용된다.
- 서버가 필요없는 데이터베이스이다.
- 파일 기반의 데이터베이스로 모든 데이터를 단일 파일에 저장한다.
- 앱의 데이터를 구조적이고 효율적으로 저장할 수 있게 해주며, SQL문을 사용하여 데이터를 조작할 수 있다.
🌠 Firebase Realtime Database / FireStore
- Firebase에서 제공하는 NoSQL 클라우드 데이터베이스이다.
- 두 데이터 모두 실시간으로 데이터를 동기화하고 저장할 수 있다.
- 오프라인에서도 앱이 작동하도록 지원한다.
📌 Firebase Realtime Database와 FireStore
1) Firebase Realtime Database
- Firebase Realtime Database는 JSON 형태로 데이터를 저장하며, 모든 데이터는 싱글 트리에 저장된다.
- 실시간으로 데이터를 동기화하므로 사용자는 항상 최신 상태의 데이터를 볼 수있다.
- 오프라인에서도 앱이 작동하도록 지원하며, 다시 온라인 상태가 되면 데이터가 동기화된다.
- 단점으로는 데이터 모델링과 복잡한 쿼리에 제한이 있고, 데이터가 크게 증가 할 경우 스케일링에 제한이 있다.
2) FireStore
- Firebase Realtime Database의 단점을 해결하기 위한 새로운 데이터 베이스이다.
- 데이터를 문서와 컬렉션으로 구조화하여 저장하고, 직관적인 데이터 모델링을 가능하게 한다.
- 풍부한 쿼리 기능을 제공하며, 데이터베이스 스케일링이 더욱 용이하다.
- 실시간 데이터 동기화 및 오프라인 지원기능을 가지고 있다.
🌠 DataStore
- android Jetpack의 일부로 앱의 데이터를 안전하게 저장하는데 사용되는 새로운 데이터 저장 방법이다.
- Shared Preferences의 대체제로 개발되었다.
- Preferences DataStore와 Proto DataStore 두 가지 형태로 제공된다.
- Flow를 사용하여 비동기적으로 데이터를 읽어오고 저장하며 메인 스레드에서 안전하게 데이터를 읽고 쓸 수 있도록 해준다.
- 데이터의 일관성을 보장하며, 데이터를 읽고 쓰는 동안 데이터 충돌을 방지한다.
- 네트워크 연결이 없는 상황에서도 잘 동작하며, 네트워크가 연결되면 변경사항이 동기화된다.
- Shared Preferences에서 DataStore로 데이터를 쉽게 마이그레이션 할 수있다.