Kotlin

    FusedLocationService로 위치 조회

    FusedLocationService로 위치 조회

    위치 인식 앱 빌드 | Android 개발자 | Android Developers 위치 인식 앱 빌드 모바일 애플리케이션의 고유한 기능 중 하나는 위치 인식 기능입니다. 모바일 사용자는 어디에나 기기를 휴대하기 때문에 앱에 위치 인식 기능을 추가하면 사용자에게 더욱 developer.android.com 안드로이드 공식문서에서 제공하는 위치 라이브러리입니다. 기존에 사용하던 LocationManager는 생각보다 정확하지 않아서 새로운 위치기반 API로 바꾸면서 정리해보려 합니다. 총 4단계로 의존성 주입 권한 설정 및 권한 검증 위치 기능 구현 사용 입니다. 의존성 주입 구글 위치 설정 라이브러리 의존성을 app 단 build.gradle에 넣어줍니다. //구글 위치 설정 라이브러리 implementa..

    SingleTon Holder로 편하게 SingleTon 쓰기

    SingleTon Holder로 편하게 SingleTon 쓰기

    class MyViewModel(){ companion object: SingleTonHolder } Compose에서 ViewModel로 데이터 전달을 하다 보니 항상 같은 인스턴스를 사용할 필요가 생겼습니다. 코드 1. 싱글톤으로 호출할 클래스의 생성자가 없는 경우 open class SingletonHolder (creator: () -> A) { private var creator: (() -> A)? = creator @Volatile private var instance: A? = null fun getInstance(): A{ val checkInstance = instance if(checkInstance != null) return checkInstance return synchroniz..

    ApplicationContext 일반 클래스에서 쓰기

    ApplicationContext 일반 클래스에서 쓰기

    개발하면서 Service가 아닌 Repository와 같이 사용자가 임의로 만든 클래스에서 Context가 필요한 경우가 있다. 일반적으로 패러미터로 넘기거나 클래스 생성자로 넘기는 방법이 있습니다. (생성자로 넘기게 되면 의존성이 강해지므로 권장하는 방법은 아니다. ) Context를 매번 넘길 필요 없이 어디에서든 ApplicationContext를 받는 방법이 있습니다. 만약 Context가 무엇인지 이해하지 못하고 있다면 아래글을 보는걸 추천드립니다. Context? 개발하면서 항상 헷깔렸던 Context에 대해 공식문서와 구글 검색을 통해 정리를 해봤다. 정의 문맥 또는 맥락은 언어학, 사회학에서 핵심이 되는 사건 주변의 실체 정의만 봤을 때 안드로이드에서 huzit.tistory.com 방법..

    Enum(열거형) 클래스

    Enum(열거형) 클래스

    Enum클래스 type-Safe(타입을 판벼할 수 있어서 Runtime 오류가 일어나지 않고 compile 시 문제를 잡을 수 있다.)한 열거 값을 구현하는 데 사용한다. enum class Direction{ NORTH, SOUTH, WEST, EAST } 각 Enum 상수는 객체이다. 그리고 Enum 상수는 콤마(,)를 통해 나눠진다. 초기화 각 enum값은 enum클래스의 인스턴스로 초기화할 수 있다. enum class Color(val rgb: Int){ RED(0XFF0000), GREEN(0X00FF00), BLUE(0x0000FF) } 익명 클래스 enum상수는 자신만의 익명 클래스를 사용할 수 있다. fun main() { println(ProtocolState.WAITING.signal..

    중첩 클래스와 내부 클래스

    중첩 클래스와 내부 클래스

    중첩 클래스 다른 클래스에 클래스 중첩할 수 있다. class Outer{ private val bar = 1 class Nested{ fun foo() = 2 } } Outer.Nested.foo() 또한 인터페이스도 중첩할 수 있다. 클래스와 인터페이스로 만들 수 있는 모든 조합이 가능하다. interface OuterInterface{ class InnserClass interface InnerInterface } class OuterClass{ class InnerClass interface InnerInterface } 내부 클래스 중첩 클래스와 같지만 외부 클래스 멤버에 접근할 수 있다. 내부 클래스는 외부 클래스 객체에 대한 레퍼런스를 갖는다. class Outer{ private val b..

    제네릭 ( in & out)

    제네릭 ( in & out)

    타입을 변수처럼 받을 수 있도록 하는 방법 자바와 마찬가지로 코틀린 클래스는 타입 패러미터를 가질 수 있다. class Box(t: T){ val value = t } 일반적으로 제네릭 클래스의 인스턴스를 생성할 때 타입을 전달해야 한다. 하지만 파라미터의 타입을 추론할 수 있다면 생략할 수 있다. val box: Box = Box(1) val vox = Box(1) 변성(Variance) in & out 코틀린의 리스트와 배열은 자기 자신의 타입만 허용하는 무공변입니다. 변성이란 배열과 리스트 등 에서 무공변인 제네릭을 공변, 반공변으로 바꾸는 법입니다. 즉,배열과 리스트 등 에서 상위 또는 하위 타입의 원소를 받는 방법입니다. 코틀린에서 변성을 선언하는 시점은 2가지이다. 선언 위치 변성 : 클래스나..

    IllegalStateException:no event down from INITIALIZED in component androidx.navigation.NavBackStackEntry

    IllegalStateException:no event down from INITIALIZED in component androidx.navigation.NavBackStackEntry

    원인 Android Composed에서 Navigation이 일어났을 때 발생했습니다. 문제의 코드 navigateToQrMainPage = { navController.navigate("main_page"){ launchSingleTop = true restoreState = false popUpTo(navController.graph.startDestinationId){ saveState = true inclusive = true } } } 해결 From the androiddev community on Reddit Explore this post and more from the androiddev community www.reddit.com 레딧 이슈를 확인해 본 결과 Lifecycle 문제임을 찾..

    [Text] Text 패러미터 정리

    [Text] Text 패러미터 정리

    컴포즈 프로젝트를 생성하면 가장 먼저 만나는 컴포저블인 Text입니다. 기존 안드로이드의 TextView는 수많은 위젯의 부모였지만 컴포즈에선 그냥 단일 함수입니다. 전체 코드 @Composable fun Text( text: String, modifier: Modifier = Modifier, color: Color = Color.Unspecified, fontSize: TextUnit = TextUnit.Unspecified, fontStyle: FontStyle? = null, fontWeight: FontWeight? = null, fontFamily: FontFamily? = null, letterSpacing: TextUnit = TextUnit.Unspecified, textDecoratio..