Kotlin

- 자사 서비스에서 Realm DB를 활용하고 있다. - Realm DB는 빠르고 가벼운 로컬 데이터 저장을 위한 객체 기반 데이터베이스이다.  - Realm DB의 객체로 리스트를 구성할 때는 RealmRecyclerViewAdapter를 이용하여 구성할 수 있다. - 내부 구성은 일반 RecyclerView와 크게 다르지 않다. 하지만 getItem 등의 함수가 RealmDB 자체에서 오리지널 인스턴스를 가져오는 방식으로 동작한다./** * Returns the item in the underlying data associated with the specified position. * * This method will return {@code null} if the Realm instance has ..
- 기존 프로젝트 내에 인앱 결제 관련 로직이 너무 노후화되어 있었고, 함수도 분산되어 있어서 관리하기가 난해했다. - 최근에 모듈을 최신화하면서 주요 함수를 BillingManager라는 싱글톤 object로 정리했는데, 그 내용을 기록해 본다.결제 모듈 초기화object BillingManager { private var billingClient: BillingClient? = null /** * 결제 모듈 초기화 완료 여부 */ fun isReady(): Boolean { val client = this.billingClient ?: return false return client.isReady }- 결제 모듈 초기화 완료 여부를 확인하는..
Application 클래스란?Application 클래스는 Android 애플리케이션의 전반적인 상태를 관리하는 기본 클래스입니다.앱이 실행될 때 가장 먼저 생성되며, 앱이 종료될 때까지 유지됩니다. - 싱글톤처럼 동작하며, 어디서든 접근 가능 - 앱의 생명 주기 관리- 앱 전역에서 공유해야 하는 데이터(예: SharedPreferences, DI Container, Theme, Locale 등)를 관리- 의존성 주입(Dagger/Hilt), Firebase 초기화, Crashlytics 설정 등 각종 초기설정을 여기서 진행 - 반드시 Manifest에 선언해주어야 한다.
memoText.text = Html.fromHtml(timeBlock.description?.replace("\n", ""))- 위와 같은 코드가 존재한다. Html.fromHtml()을 사용하여 HTML 태그를 포함한 문자열을 Spanned 형태로 변환하여 TextView에서 HTML 렌더링을 할 수 있게 하는 코드이다. - replace("\n", "")를 통해 개행(\n)을 태그로 변환하여 HTML에서 줄 바꿈을 유지하도록 한다. - 그런데, 사용자가 만일 EditText에 이런식으로 입력해 버리면 통째로 사라져 버린다. 그래서 입력된 문자를 HTML 엔티티로 변환하는 과정이 필요하다. fun fromHtmlSafe(source: String?): Spanned { val safeTex..
- height를 코틀린에서 wrap_content로 변경해 봅니다.- adjustViewBounds는 이미지뷰를 경계선에 따라 조정할지 여부입니다. background에 커스텀 레이아웃을 사용할 때 유용합니다.val layoutParams = binding.previewImg.layoutParamslayoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENTbinding.previewImg.layoutParams = layoutParams
- 앱에서 활용하던 GIF 파일들이 많아지면서 용량이 증가하고 관리 비용에도 점점 문제가 생기기 시작했습니다. - 이에 따라 애니메이션 재생에도 뒤처지지 않고, 용량도 더 적은 WebP 파일을 활용하기로 결정했습니다. - Glide를 활용해 렌더링을 진행했는데, 사실 기존 GIF 파일 재생 방법과 큰 차이가 없습니다. 같은 로직으로 두 가지 종류 파일 모두 호환 가능합니다. - WebP가 GIF보다 나은 점들은 아래와 같습니다. - raw 폴더 하위에 webp 파일을 넣고, Uri 경로를 구성해주어야합니다.val resourceUri = Uri.parse("android.resource://${context.packageName}/${R.raw.test}") - 해당 Uri 기반으로 로드해 줍니다. ur..
YIQ란?YIQ는 NTSC TV 신호에서 사용된 색 공간(Color Space)아날로그 TV 방송에서 흑백 TV와 컬러 TV를 동시에 지원하기 위해 설계됨RGB보다 밝기와 색상 정보가 분리되어 있음 → 밝기 기반 이미지 처리에 유용Y(Luminance, 밝기), I(In-phase, 색상 성분), Q(Quadrature, 색상 성분)로 구성됨YIQ의 구성 요소- Y (Luminance, 밝기) : 이미지의 밝기(명도) 정보 (흑백 TV에서도 사용 가능)- I (In-phase, 색상 차 성분 1) : 주황색(Orange) ↔ 청록색(Cyan) 색상 정보- Q (Quadrature, 색상 차 성분 2) : 자홍색(Magenta) ↔ 녹색(Green) 색상 정보YIQ와 RGB 변환 공식- RGB → YIQ ..
1. 코틀린에서의 람다 표현식이 무엇인가?- 람다 표현식은 함수를 명시적으로 선언하지 않고도 함수와 유사한 구조를 정의하는 간결한 방법입니다. - 인수로 전달하거나 변수에 저장할 수 있는 코드 블록을 만들 수 있습니다. - 람다 표현식은 간결하고 인라인 함수 동작을 제공하는 데 유용합니다.val sum = { a: Int, b: Int -> a + b } // Lambda expressionval result = sum(3, 4) // Invoking the lambda expressionprintln(result) // Output: 7 2. 코틀린에서 고차 함수란 무엇인가?- 고차 함수(High-Order Function)란 다른 함수를 인자로 받거나, 함수를 반환하는 함수를 의미합니다.- 함수를 변..
- getIdentifier()는 이름(String)으로 앱의 리소스 ID를 가져오는 함수입니다.resources.getIdentifier(name: String, defType: String, defPackage: String) name: 찾고 싶은 리소스의 이름 (문자열)defType: 리소스의 종류 (drawable, string, layout, id, color 등)defPackage: 패키지 이름 (context.packageName을 사용하면 현재 앱의 패키지)- Drawable 리소스 반환하기context.resources.getIdentifier("ic_weather_sunny_day", "drawable", context.packageName) 만일 조건에 해당하는 리소스가 존재하지 않으..
ACTION_PICK으로 선택이 아니라 보기 상태로 갤러리를 진입하는 방법입니다.val intent = Intent(Intent.ACTION_VIEW)intent.type = "image/*"startActivity(intent)초기에는 위 코드로 단순하게 진입할 수 있었으나 매 진입 시마다 "지원되지 않는 파일 형식입니다"라는 Toast가 팝업 되었습니다.보통 ACTION_VIEW는 특정 파일을 열도록 되어 있기 때문에 type에 지정한 경로로는 제대로 된 파일 형식을 열어주지 못하고 image 폴더 전체를 보여주게 됩니다.이러한 오류 현상을 기반으로 갤러리 앱을 열지 않으려면 갤러리 앱 자체의 package name을 찾아 intent 처리해 주면 되겠습니다.val galleryIntent = act..
SeungYong.Lee
'Kotlin' 태그의 글 목록 (2 Page)