본문 바로가기

Kotlin

(12)
[Algorithm] 대칭수 확인하기 대칭수를 확인해보는 알고리즘 가운데 숫자를 기준으로 서로 대칭하는 숫자인지 확인 예를 들어, 121 => True 1221 => True -121 => 121- False 입력받는 값 : n 생각한 과정 1. 문자열로 변경 2. 문자열로 변경한 뒤 중간을 기준으로 substring 3. 앞 배열 , 뒤 배열을 만든 뒤 뒤의 배열을 reverse해서 비교 놓친 과정 1. 가운데 기준으로 같다면 substring을 거치지 않아도 됨 2. 문자열 자체를 하나의 배열로 생각해서 reverse 시켰을 때가 같으면 대칭수 3. 배열 자체를 비교하지 말고, contentEquals를 사용해 내용 자체를 비교 다시 생각한 과정 1. 음수가 되면 -가 붙어서 대칭이 될 수 없으므로 양수인 경우만 로직을 타게 2. 우선 ..
[Kotlin] apply, let, with, also, run 비교 (Scope Function) 안녕하세요 :) 오늘은 코틀린의 다섯 가지 함수를 비교해보고자 합니다. [2022.07.14 업데이트] SCOPE 함수란? 객체의 컨텍스트 내에서 코드 블록을 실행하는 것이 유일한 목적인 함수입니다. 람다식으로 SCOPE 함수를 호출할 때 임시적으로 범위를 생성하고, 해당 범위 내에선 객체의 이름 없이 객체에 접근할 수 있습니다(it, this 등) 기본적으로 5가지 함수는 같은 기능을 하지만 표현식이 어떻게 되는지, 블록 내에서 객체 사용법에 따라 구분합니다 📍 let 함수원형 public inline fun T.let(block : (T) -> R): R 객체를 블록의 인자(T)로 넘기고, 람다의 결과값(R)을 반환합니다. val numbers = mutableListOf("one", "two", "..
[Android] MVVM 구현하기 안녕하세요 :) 이전 포스팅에서 MVVM에 대해 알아봤습니다만, 2022.05.30 - [Android] - [Android] Pattern (MVC, MVP, MVVM) 막상 MVVM으로 구현하려니, 적용이 꽤나.. 어려웠습니다 🥶 그래서 MVVM을 구현 시 알아둬야할 부분에 대해 자세한 개념보다는 어떻게 써야하는지를 정리하려고 합니다 .. 멀고도 험한 MVVM의 길 😮‍💨 ⚒ Skill ⚒ - ViewModel - LiveData - DataBinding - Repository - Dagger ViewModel - AAC (Clean Architecture을 쉽게 구현하도록 제공되는 library) 중 하나 - LifeCycle을 고려해 UI 관련 데이터를 저장하고 관리 👀 ViewModle을 사용하..
[Android] Timber 사용해보기 로그를 찍을 때마다 Log를 사용했었는데 Using 'Log' instead of 'Timber' Log를 사용하는 부분에서 위와 같은 메시지가 떴습니다 줄곧 Log만 사용하다가 Timber에 대해 궁금증이 생겨서 이에 대해 정리해보려고 합니다. 1. Timber ? 마찬가지로 로깅 클래스인데 , 기존에 사용하던 Log보다 더 간편하고 릴리즈할 때 로그가 노출될 걱정을 하지 않아도 됩니다. 다른 로깅 클래스와 마찬가지로 사용법은 어렵지 않습니다. 2. Timber 사용법 우선, 다른 라이브러리를 implementation 해줍니다. (build.gradle(:app)) implementation 'com.jakewharton.timber:timber:4.7.1' 그리고 Log.d를 사용할 때와는 달리 초..
[Android/kotlin] LayoutInflater 사용 (PopupWindow) 오늘은 LayoutInflater를 사용해서 PopupWindow를 만들어보겠습니다 팝업창을 만들고 사용자가 만든 레이아웃을 설정할 수 있고, 현재 Activity 최상단에 띄워집니다 그럼 PopupWindow를 간단하게 사용해보고 특징들에 대해 정리해보도록 하겠습니다 1. PopupWindow에 띄울 Layout 설정 간단한 예제로 아래 그림과 같은 TextView 1개, Button 2개로 구성된 레이아웃을 만들어보겠습니다 [text_popup.xml] 2. xml을 view로 만들어줍니다 xml과 view를 만들어주기 위해선 LayoutInflate를 알아야합니다 여기서 LayoutInflate란 xml에 선언된 위젯들을 실제 View로 만들어주는 역할을 합니다. var linear = Linear..
WindowManager$BadTokenException Fatal Exception : android.view.WindowManager$BadTokenException Unable to add window — token android.view.VoewRootImpl@ is not valid; is your activity running? 이 에러가 지속해서 발생했는데 Firebase Crashlytics 에서 🔔 창 추가 불가 - 토큰이 올바르지 않음, 활동 실행 여부 확인 필요 이 비정상 종료는 대개 앱에서 이전에 완료된 활동을 컨텍스트로 사용하여 대화상자를 표시하려고 시도하여 발생합니다. 예를 들어 활동이 종료되면 대화상자를 표시하려고 시도하는 AsyncTask를 트리거하지만 사용자가 작업이 완료되기 전에 활동에서 뒤로 이동하면 발생할 수 있습니다. 비정..
[Java / Kotlin] 얕은 복사 , 깊은 복사 객체의 복사를 크게 두 가지 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) 나눌 수가 있습니다. 혼동하여 사용할 경우 결과값이 달라지므로 차이를 알고 사용해야 합니다. 1. 얕은 복사 (Shallow Copy) 객체 복사 시 해당 객체의 주소값을 복사 얕은 복사의 경우, 주소값을 복사하기 때문에 객체 복사 후 변수를 변경하거나 삭제하면 기존 객체의 변수값에도 변화가 생긴다. 예시 배열에 들어간 값을 삭제하는지 테스트해보겠습니다 ✔ Java ArrayList origin = new ArrayList(); origin.add("AAA"); origin.add("BBB"); ArrayList swallowCopy = new ArrayList(); swallowCopy = origin; s..
[Android/kotlin] 시스템 폰트 크기에 영향받지 않게 하기 font size DP 선언 이전 포스팅에서도 정리한 적이 있지만 dp는 물리적인 디스플레이 해상도에 영향을 받지 않기 때문에 해상도에 따라 맞춰주지 않아도 된다. 반면, sp의 경우는 dp와 유사하지만 물리적인 디스플레이 해상도에 영향을 받는다. 그렇기 때문에 해상도에 영향을 받지 않으려면 dp로 TextSize를 정해주면 된다 (Galaxy S8 기준) 안드로이드 설정-> 디스플레이 -> 글자 크기와 스타일에 들어가면 글자 크기를 조절할 수 있는데, 부끄럽게도 이번에 처음 확인을 해보았다. 결과는 대참사가 일어났다. UI는 뒤죽박죽이 되었고, 심지어 잘려서 보이지 않는 텍스트가 발생했다. 부랴부랴 TextSize를 dp로 변경했지만, 내가 놓친 부분이 2개나 있었다. TextView가 programm..