개발/Android(48)
-
Server Driven UI
Server Driven UI서버에서 제공하는 데이터를 사용해 기본 구성요소를 렌더링 할 수 있게 하는 방법 앱의 모든 레이아웃을 하드코딩 하는 대신, 서버에서 데이터를 가져와 런타임에 동적으로 UI를 생성함네이티브 구성 요소가 앱에서 직접 렌더링되므로 로드 시간 단축, 성능 향상 Pros-in-native성능 : 콘텐츠를 웹으로 로드하면 더 느림. 네이티브는 빠름~ UX : 네이티브는 플랫폼에 최적화되었으므로 당연히 더 좋음. 전체 앱에서 일관된 모양과 느낌을 제공할 수 있음보안 : 안전~ 웹은 당연히 데이터를 직접 받아서 로드하므로 보안 위협 있을 수 있음접근성 : 네이티브는 장애가 있는 사용자가 텍스트 → 음성 변환 같은거 사용할 수 있도록 지원함 How to get Server-Driven-UI?..
2023.07.25 -
Using Room (With HILT)
Add Dependencyimplementation 'androidx.room:room-runtime:2.4.3' kapt 'androidx.room:room-compiler:2.4.3' implementation 'androidx.room:room-ktx:2.4.3' Creating Package클린아키텍처 & Hilt 를 따른다고 가정하고, 다음과 같이 패키지를 만든다 Preparing Entity & DAO & Databaseutils → Constants.ktobject Constants { const val CONTACTS_TABLE = "contacts_table" const val CONTACTS_DATABASE = "contacts_database" } db → ContactsEntity...
2023.07.25 -
Memory leaks
정적 필드에서 참조되는 개체static field는 일반 instance 변수보다 수명이 더 길기때문 개체가 정적 필드에 저장될 때 메모리 누수 발생 가능성이 있음. 적절히 onDestroy등에 해제시켜줘야함 class MainActivity : AppCompatActivity() { companion object { private var instance: MainActivity? = null } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) instance = this } //메모리 해제~ override fun onDestroy() { super.onDestroy() instance = nu..
2023.07.25 -
Data Store
What is DataStoreSharedPreferences의 대체제Kotlin&Coroutine&Flow사용데이터를 비동기식으로 저장함 DataStore을 사용하는 이유SharedPreferences는 Main스레드로부터 안전하지않음….→ DataStore은 Dispatchers.IO를 사용해 UI스레드를 사용한다~runtime exception으로부터 안전하다SharedPreferences로부터의 migration을 지원한다Protocol buffer를 사용해서 Type safety를 지원한다! DataStore이 지원하는 두 가지 유형Preference DataStore key / value 값 쌍을 사용해 데이터를 저장함. but 형식 안전성을 제공하지는 않음Proto DataStore프로토콜 ..
2023.07.25 -
6 Design Patterns Every Android Developer Must Know
Singleton 오직 하나의 인스턴스만 허용함 응용프로그램의 모든 부분에서 액세스가 가능 singleton클래스는 외부 코드에 의존하지 않고, 자체 인스턴스를 생성해야함 singleton 클래스는 인스턴스가 스레드로부터 안전한지 확인해야함 키 속성을 유지하면서, 필요한 경우 쉽게 확장하거나 하위 클래스로 분류할 수 있느 방식으로 설계되어야함 lass Singleton private constructor() { companion object { private var instance: Singleton? = null fun getInstance(): Singleton { if (instance == null) { instance = Singleton() } return instance!! } } } DB나..
2023.05.03 -
알아두면 좋은 Kotlin extension
💡 자주 사용하는 extension들을 모아봤다 showToast() fun Context.showToast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } hideKeyboard() fun View.hideKeyboard() { val inputMethodManager = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(windowToken, 0) } loadUrl() fun WebView.loadUrl(url: String?) { if (!url..
2023.05.03