728x90

Android

    [Android] Jetpack LiveData란?

    LiveData란? LiveData는 데이터를 저장하고 변화를 관찰 할 수 있는 객체이다. UI객체는 LiveData에 옵저버를 등록할 수 있으며 데이터가 변경될 때 UI를 변경할 수 있다. 예를 들어, 아래처럼 LiveData를 생성하고 옵저버를 등록할 수 있다. 데이터가 변경되면 옵저버에게 전달된다. val elapsedTime = LiveData elapsedTime.observe(this, Observer { time -> tv_timer.text = time.toString() }) LiveData는 LifecycleOwner의 상태가 STARTED와 RESUMED로 활성화 상태일 때만 옵저버에게 데이터 변화를 알려주고, DESTROYED로 변경되면 LiveData도 자동으로 소멸된다. Live..

    [Android] Jetpack ViewModel이란?

    ViewModel이란? JetPack의 ViewModel은 액티비티의 수명 주기를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었다. 안드로이드의 액티비티 생명주기와 분리를 시켜, 액티비티가 재실행돼도 데이터가 소멸되지 않도록 한다. 또한 액티비티가 파괴되면 ViewModel의 자원도 자연히 소멸된다. ViewModel 배경 시스템에서 UI 컨트롤러를 제거하거나 다시 만들면 컨트롤러에 저장된 일시적인 모든 UI 관련 데이터가 손실된다. 데이터가 단순한 경우 Activity는 onSaveInstanceState() 메서드를 사용하여 onCreate()의 번들에서 데이터를 복원할 수 있다. 하지만 이 접근 방법은 사용자 목록이나 비트맵과 같은 대용량일 가능성이 높은 데이터가 아니라, 직렬화했다가 다..

    [Android] Navigation Drawer 안에서 ExpandableListView 사용하기

    ExpandableListView란? ExpandableListView는 ListView의 한 종류로써, ListView는 단순히 리스트를 뿌려주는 역할을 하고, ExpandableListView는 말 그대로 확장 기능을 제공한다. 단순히 ListView처럼 array.xml을 생성하여 리소스 아이디를 직접 적용할 순 없고, HashMap을 만들어서 적용해야 한다. 이번 실습에선 Navigation Drawer 안에서 ExpandableListView를 사용해 부모와 자식 관계를 나타내 줄 것이다. 최종 결과물로 아래 사진처럼 나오게 된다. 코드 MainActivity.kt MainActivity에서는 ExpandableListView의 어댑터를 설정해야 한다. 어댑터에는 부모와 자식 관계를 나타내는 L..

    [Android] 데이터 바인딩(Data Binding) 사용하기

    데이터 바인딩이란? 앱의 데이터 소스와 레이아웃의 구성요소를 결합할 수 있게 해주는 Android JetPack의 라이브러리 중 하나이다. 기존에 데이터를 레이아웃에 그리거나 클릭 리스너를 연결시켜야 할 때 findViewById 메소드를 사용해서 뷰를 선언한 뒤, 클릭 리스너 인터페이스를 구현해야 했다. 물론 코틀린으로 넘어오면서 findViewById 메소드를 사용하지 않고도 할 수 있었지만, 클릭 리스너를 구현한다거나 값이 변경됐을 때 일일이 뷰를 찾아서 세팅해주는 번거로움이 있었다. 데이터 바인딩을 사용해서 데이터와 레이아웃을 결합해주면 이러한 번거로움을 해결할 수 있고, 좀 더 간결한 코드로 MVVM 패턴을 구현할 수 있다. 데이터 바인딩 사용하기 1. build.gradle 설정 데이터 바인딩..

    [Android] SharedPreferences 간단하게 사용하기 (Kotlin)

    안드로이드 앱을 개발하면서 데이터를 저장하는 방법으로는 여러 가지가 있는데, 오늘은 그중 하나인 SharedPreferences를 사용하는 방법을 알아볼 것이다. SharedPreferences란? SharedPreferences는 간단한 값을 저장할 때 주로 사용한다. 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장할 때 DB를 사용하면 복잡하기 때문에 SharedPreferences를 사용하면 적합하다. SharedPreferences는 어플리케이션에 파일 형태로 데이터를 저장한다. 데이터는 (key, value) 형태로 data/data/패키지명/shared_prefs 폴더 안에 xml 파일로 저장된다. 해당 파일은 어플리케이션이 삭제되기 전까지 보존된다. SharedPreferences ..

    [Android] 안드로이드 정리 (12) - 브로드캐스트 수신자 (Broadcast Receiver)

    브로드캐스팅이란? 브로드캐스팅이란 메시지를 여러 객체에 전달하는 것을 뜻한다. 카카오톡에서 여러 사람에게 메시지를 전달할 때 그룹 채팅방을 만들어 메시지를 전달하는 것이 여기에 해당된다. 예를 들어, 다른 사람으로부터 문자를 받았을 때 이 문자를 SMS 수신 앱에 알려줘야 한다면 브로드캐스팅으로 전달하면 된다. 이런 메시지 전달 방식을 글로벌 이벤트(Global Event)라 부른다. 대표적인 예로는 전화나 문자 메시지가 오는 경우가 있다. 앱에서 브로드캐스팅 메시지를 받고 싶다면 브로드캐스트 수신자를 만들어 앱에 등록하면 된다. 다시 말해, 기기 안에서 동작하는 다른 앱 A로부터 특정 메시지를 받기 위해 앱에 브로드캐스트 수신자를 등록하면 A 앱의 메시지가 전달되게 된다. 브로드캐스트 수신자 등록하고 ..

    [Android] 안드로이드 정리 (11) - 핸들러

    출처 : Do it! 안드로이드 앱 프로그래밍 / 정재곤 핸들러 이해하기 메인 액티비티는 앱이 실행될 때 하나의 프로세스에서 처리된다. 하지만 같은 프로세스 안에서 일련의 기능이 순서대로 실행될 때 대부분은 큰 문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길 수 있다. 이런 문제를 해결하기 위해 하나의 프로세스 안에서 여러 개의 작업이 수행되는 멀티 스레드 방식을 사용하게 된다. 하지만 스레드들이 동시에 리소스에 접근할 때 데드락이 발생하여 시스템이 비정상적으로 동작할 수도 있다. 지연 시간이 길어질 수 있는 앱이라면 오랜 시간 작업을 수행하는 코드를 별도로 분리한 다음 UI에 응답을 보내는 방식을 사용한다. 이를 위해..

    [Android] 안드로이드 정리 (10) - 프래그먼트 (Fragment)

    출처 : Do it! 안드로이드 앱 프로그래밍 / 정재곤 프래그먼트란? 하나의 액티비티에서 화면의 아래쪽 일부분에 독립적인 레이아웃을 만들고 그 안에서 동영상을 재생하고 싶다면 어떻게 구성해야 할까? 또는 A 액티비티에서 사용하는 글쓰기 기능을 B 액티비티에서도 사용하고 싶을땐 어떻게 해야 할까? 안드로이드 정리 (5) - 레이아웃 인플레이션 이해하기에서 부분 화면을 뷰그룹 객체로 객체화(인플레이션)한 후 메인 레이아웃에 추가하는 방법에 대해 설명했다. 하지만 이와 같은 방법은 단말의 리소스를 많이 사용하는 비효율적인 방법이다. 하나의 화면을 여러 부분으로 나눠서 보여주거나 각각의 부분 화면 단위로 바꿔서 보여주고 싶을 때 사용하는 것이 프래그먼트(Fragment)이다. 프래그먼트는 코드가 복잡해지는 문..

728x90