Android 100

커스텀 객체를 sharedpreferences 에 저장하고 불러오기

1. String 형식으로 저장 할때 public void setStringArrayPref(Context context, String key, ArrayList values) { SharedPreferences prefs = context.getSharedPreferences("key", MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); JSONArray a = new JSONArray(); for (int i = 0; i < values.size(); i++) { a.put(values.get(i)); } if (!values.isEmpty()) { editor.putString(key, a.toString()); } else { edit..

Android 2021.04.16

Kotlin(코틀린) 에서 fragment 를 써보자

자바에서는 fragment를 만드는게 아주 귀찮았던거 같은 기억이 있다. 특히 fragment 안에 fragment 를 넣는건 좀 더 신경 써줄 코드가 있었던걸로 기억하는데 코틀린에서는 Activity 에서 fragment 를 만들때 xml 에 fragment가 띄워질 공간을 framelayout 으로 만들어주고 액티비티에서 supportFragmentManager.beginTransaction() .replace(R.id.fragment_view , AccountBookFragment()).commit() supportFragmentManager 를 사용하고 replace 안에 fragment 가 띄워질 공간 id 와 그곳에 띄워질 fragment의 이름을 적고 commit 그리고 프라그먼트안에 프라그..

Android 2021.04.04

ListView(리스트뷰) 자동 높이, 크기 조절

리스트뷰안에 들어간 데이터의 수 만큼 자동으로 높이를 조절해주는 코드. public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = list..

Android 2021.03.29

MVVM 패턴 설명 - 2(view Model)

정말 오랜만에 MVVM 패턴의 두번째 글을 쓴다. 그동안 이것저것 바빴는데 다 핑계처럼 들릴거 같아서 그냥 포스팅이나 하겠다. 사실 핑계 맞다. 저번 포스팅은 View에 대해 다뤘는데 오늘은 ViewModel 에 대해서 적으려고 한다. ViewModel은 MVP 패턴에 프레젠터랑 비슷한 느낌이다. 중간에서 데이터를 받고 전달해주는 우편부 역할. 그러나 다른점이 있으니 패턴이름도 달라졌을터 의존성의 문제가 달라졌다. MVP 패턴의 프레젠터는 모델과 뷰에 각각 의존성을 가지고 있었는데 MVVM 은 data Binding 이라는 개념을 통해 Model 파트와의 의존성만 가지고 view와의 의존성은 가지지 않는 구조를 갖게 되었다. 이해가 되지 않는다면 인터넷에 MVVM 패턴이라고만 쳐도 그림으로 그려져 있는것..

Android 2021.03.27

MVVM 패턴 - 설명(1) (View)

MVVM 패턴은 사용하는 사람들마다 조금씩 만드는 방식이 달랐다. 여러 방식들을 보고 그 중에서 가장 개인적으로 마음에 드는 방식의 예제를 보고 따라하며 이해했다. 이번 공부에는 LiveData , RxJava , Retrofit2, Databinding 이 사용되었다. 사전 지식이 없다면 이해하기 힘들 수 있다. 먼저 View 파트부터 설명 해보겠다. View 는 전에도 말했듯 유저가 클라이언트랑 소통하는 화면을 의미한다. 안드로이드에서는 Activity 를 말하겠다. MVVM 패턴에서의 View는 ViewModel에서 변경되는 값들을 Observer 패턴으로 관찰하며(이 프로젝트에서는 LiveData가 이를 쉽게 해결한다.) 변경되는 값들을 그대로 바꿔서 보여준다. 일단 나의 경우는 모든 Activi..

Android 2021.02.11

안드로이드 하드웨어 모듈과 TCP/IP 소켓 통신

소켓 통신은 대학교때도 프로젝트로 진행했던 기억이 난다. 라즈베리파이로 온도센서, 습도센서를 이용해서 소켓 통신을 하여 경보기를 만들었는데 그때는 c언어로 소켓통신을 만들었기에 어렵게 어렵게 완성했던 기억이 있다. 지금은 안드로이드 개발에 큰 관심을 가지고 있기도 하고 정리해두고 싶어서 이렇게 글을 쓴다. 직접 혼자서 만들어보면 좋겠지만 당장 라즈베리파이나 아두이노도 없어서 인터넷글을 보고 사용법에 대해서 공부하고 있다. 공부하다보니 Android Things 라는것도 있던데 기회가 되면 이것도 알아보고 싶다. 열심히 공부하며 글을 쓰고 있었는데 정말 소개가 잘 된 블로그가 있었다.아래 내용은 해당 출처에 있는 글이다. 출처 :ddangeun.tistory.com/31 TCP/IP 소켓 통신 TCP/IP..

Android 2021.01.28

안드로이드에서의 Parcelable vs Serializable

안드로이드를 개발하다보면 다른 액티비티로 데이터를 전달할때 그 데이터가 복잡한 클래스의 객체라면 Serializable 또는 Parcelable 를 사용하여 직렬화 하여 인텐트에 추가해야한다. 그럼 직렬화는 뭘까? 직렬화는 1. 메모리 내에 존재하는 정보를 보다 쉽게 전송 및 전달하기 위해 byte 코드 형태로 나열하는 것이다. 여기서 메모리 내에 존재하는 정보는 즉 객체를 말한다. 2. JVM 의 메모리에 상주 되어있는 객체 데이터를 바이트 형태로 나타내는 기술 역직렬화 라는 개념도 있는데 말그대로 위의 내용의 반대라고 생각하면 된다. Serializable 부터 뭔지 알아보자. Serializable 는 Java 에서 제공하는 interface다 사용하기도 쉽고 직렬화 또한 잘된다. 그러나! 사용하기..

Android 2021.01.28

안드로이드 DI 라이브러리 Koin 에 대해

DI 가 의존성 주입을 의미하는 단어라는것은 알고 있었다. Spring 공부할때 bean 으로 의존성 주입하고 어노테이션으로 썼던 기억이 난다. 안드로이드에서는 사용해보지 않았는데 Dagger2 라는 라이브러리가 그 역할을 해주고 있다는건 알고 있었다. 그렇게 알고만 있다가 새로 공부하고 프로젝트에 적용해보고 싶은 욕심이 생겨서 찾아보던 중 Dagger2와 성능차이도 나지 않는데 훨씬 쓰기 쉽고 직관적인 라이브러리 Koin 이 있다는걸 알고 사용해보기로 했다. 쉽고 좋은데 쓰지 않을 이유는 없지. 먼저 DI를 왜 쓸까? 사용하면 얻는 이점부터 알아보자. - 의존관계 설정이 프로그램 실행시에 이루어지기 때문에 컴포넌트간 결합도를 낮춘다. - 코드 재사용성이 증가한다. - 단위 테스트의 편의성을 높여준다. ..

Android 2021.01.24

안드로이드 MVVM 패턴 - 개요

얼마전부터 공부하고 있는 MVVM 패턴에 대해 정리하기위해 포스팅을 하기로 마음먹었다. 사실 MVVM 패턴 자체만 두고보면 엄청 어렵고 그런 개념은 아닌데 제대로 만들기 위해서 들어가는 여러가지 따라오는것들이 어려운거 같다. LiveData 라던지 RxJava 라던지.. 이런것들도 다음 포스팅에 적을것이다. 일단 MVVM 패턴에 대해서 먼저 알아보자. MVVM 패턴은 예전 MVP 포스팅에서도 언급했듯 MVP패턴의 View와 Presenter , Model 사이이 양방향 의존성이 심해서 이것을 해결하기 위해 만들어졌다. MVVM 은 크게 View - ViewModel - Model 로 이루어져있고 단방향 의존성을 가진다. VIew는 ViewModel 을 참조하지만 ViewModel 은 View 를 참조하지..

Android 2021.01.24

마법같은 애니메이션 Lottie 에 대해서

안드로이드 개발자들이 디자인과 애니메이션까지 손수 제작하기란 쉽지 않다. 물론 그런 능력자들도 많이 있기 마련이지만.. 그래서 강력하지만 gif 에 비해 훨씬 가볍고 적용하기도 쉬운 Lottie 에서 설명해보려고 한다. 이 라이브러리는 주거대여 서비스로 유명한 에어비엔비에서 제작했다. 애프터 이펙트라는 디자인 툴에서 만든 애니메이션을 json 파일로 변환하여 넣어주기만 하면 바로 애니메이션이 앱에 작동한다. json 파일이라 크기도 가볍다. 그럼 어떻게 적용하면 될까? 우선 코드를 보자. bulid.gradle 에 라이브러리를 추가해준다. implementation 'com.airbnb.android:lottie:버전' // 로티 사용하고 싶은 화면에 아래처럼 객체를 생성한다. var Lottiehear..

Android 2021.01.19