0. ktxAndroid Jetpack과 기타 Android 라이브러리에 포함된 Kotlin 확장 프로그램 세트이다. Jetpack, Android , 기타 API 등과 Kotlin을 사용하기 위해 사용한다. 1. by viewModels() 코틀린의 by는 위임(deligate) 패턴을 구현하는데에 사용되는 키워드이다. 그로 인해 ViewModelProvider를 사용하지 않아도 by viewModels 함수를 사용하여 viewModel을 지연 생성할 수 있다. 2. 종속성 추가 viewmodel 관련 ktx 종속성을 추가했는데도 by viewModels 함수가 제공되지 않아 당황한 사람들이 있을 것이다. viewmodel의 초기화를 위한 함수들은 Activity/Fragment에 포함되어 있어 그런 ..
컴퓨터와 관련된 직종에 종사하는 사람들은 usb를 사용할 일이 많을 것이다. 아마 대다수의 사람들이 usb 허브와 usb를 매일 사용하면서도 2.0과 3.0의 차이에 대해선 자세히 모를 것 같다. 나 또한 그랬으나, 버전이 다른것에는 이유가 있을 것이라 생각하여 찾아서 공부한 뒤 포스팅으로 남긴다. 1. 전송 속도 Usb 2.0: 최대 480Mbps Usb 3.0: 최대 5Gbps Usb 3.0을 사용할 수 있다면 2.0은 쳐다보지 않는 것이 좋을 것 같다. 2. 전력량 Usb 2.0: 최대 500mA Usb 3.0: 최대 900mA Usb 3.0이 2.0에 비해 거의 2배 가량 많은 전력을 제공하기 때문에 Usb 허브와 같은 여러 장치를 연결하는 장비의 경우에 3.0을 사용해야 전력 부족으로 인한 신호..
안드로이드 개발자라면 MVVM이 대세라는 말들과 그에 대한 여러 정보를 어렵지 않게 많이 접해봤을 것이다. 많은 기업들이 MVVM 패턴을 사용하고 있고, 여러 채용 공고들에도 아키텍처에 대한 이해나 MVVM 실무 경험 등이 푸함되어 있기 때문이다. 그래서 오히려 무지성으로 ViewModel에 대한 이해 없이 겉핥기식 MVVM 패턴을 사용하는 사람도 많아진 것 같다. 0. ViewModel이 왜 두가지로 나뉘게 되었는가 구글이 Jetpack을 내놓기 이전부터 개발자들은 MVVM 패턴을 적용하여 개발을 하고 있었다. 그러다 구글이 Jetpack을 내놓으면서 그 당시 개발자들에겐 낯익은 ViewModel도 포함되어 있어 다들 기존의 MVVM 구조에서 사용하던 ViewModel을 구글에서 다듬어 내놨으리라 기대..
안드로이드에서의 이미지 처리는 꽤나 중요하고 골치아픈 영역이다. 이미지 로딩, 리소스 해제, 캐싱 등 고려해야할 여러 요소들이 많고, 이미지는 보통 한 두개가 들어가기보다 목록형으로 나열되는 경우가 많다보니 성능에 큰 영향을 미치기 때문이다. 이 포스팅에서는 다루지 않지만, 서버에서 이미지를 로드해야하는 경우에도 굉장히 좋은 퍼포먼스를 준다고 하는데 추후에 실무에서 사용하게 된다면 그때 추가로 작성할 생각이다. 1. Glide란 무엇인가 Glide는 Google에서 만든 이미지 로딩 라이브러리이다. (인수했으니까 아무튼 구글꺼) 처음 경험하는 사람도 쉽게 사용할 수 있을 정도로 직관적이고 효율적이라는 것이 큰 장점이다. 여기서, 어떤 이미지를, 어디에, 사이즈는 얼마로, 캐싱은 어떻게, 이런식으로 설정할..
오늘은 새해를 맞아서 CS 공부를 하고자 했던 내 다짐을 실천하고자 인프런에서 CS 강의를 샀다. 퇴근을 늦게해서 이제 첫 화를 들었는데, Json에 관한 설명이 나왔다. 웹/JS 쪽으로는 무지해서 레트로핏 쓸때만 깔짝이던 Json에 대한 설명이 나와서 이해하고 쓰고자 열심히 들었다. 1. Json이란? Json은 JavaScripit Object Notation의 약자로, 풀어 말하면 자바 스크립트 객체 표기법이라고 부를 수 있다. 이름의 뜻과 같이 Json은 자바스크립트 문법을 기반으로 하는 순수 데이터 포맷이며, key 값들과 그에 따른 value값들을 가지고 있다. (자바스크립트를 100% 따르지는 않는다) { "Animals" : [ {"Name" : "사자", "Kind" : "육식"}, {"..
1. Singleton 패턴이란? 객체의 인스턴스를 최초 1번만 생성하고 이후에는 기존 인스턴스를 호출해서 사용하는 패턴을 말한다. 우린 일반적으로 인스턴스를 생성할 때 new 연산자를 사용하는데, 이 때 메모리에 객체의 인스턴스를 할당하게 된다. 물론 최초 1번의 할당까지는 아무런 문제가 되지 않는다. 하지만 여러 곳에서 필요할 때마다 인스턴스를 생성하고 호출한다면, 이는 메모리를 엄청나게 낭비하는 '비효율적인' 행위가 될 것이다. 따라서 객체가 유일해야할 경우에 싱글톤 패턴을 사용하여 기존에 생성된 인스턴스를 호출해서 사용한다. 2. 언제 사용하는 것이 적절할까? 싱글톤을 적용하지 않고 필요할 때마다 객체를 생성해서 사용한다면 매 생성마다 메모리를 할당받게 되고, 이는 성능 저하를 일으킨다. 하지만 ..
0. 시작하기 전에 RxJava의 연산자를 제대로 이해하기 위해서는 마블 다이어그램에 대해 알아야 한다. 아래 마블 다이어그램을 한 번 보자. 위 마블 다이어그램에 대해 완벽하게 이해하고 있다면 이 포스팅을 읽지 않아도 된다. 만약 그렇지 않다면, 이 포스팅을 읽고 난 뒤에는 완벽하게 이해할 수 있을 것이다. 1. 연산자 소개 (1) subscribeOn() subscribeOn 연산자는 observableSource가 subscribe 되었을 때, 데이터를 다음 스트림으로 전달하는 액션을 수행하는 스케줄러를 지정한다. 간단하게 말해서, subscribeOn 연산자는 "Observable이 동작을 시작할 스레드"를 지정한다. 추가적으로 subscribeOn 연산자를 사용할 때 알아둬야 할 사항 몇가지에 ..
0. RxJava를 공부하게 된 계기🐥🐥🐥 코딩을 하다보면 여러 난관에 부딪히게 된다. 알고 있는 지식의 범위 안에서 쉽지만 오래걸리고 비효율적인 방법으로 처리가 가능했으나, 🌟추후에 규모 있는 프로젝트를 진행하게 된다면 이 부분에 있어 불편함을 겪게 될 것이라 생각했다🌟 ex) 콜백 지옥 물론 다른 여러 회사들이 요구하는 대표적인 기술 스택 중 하나라서 공부를 시작한 것도 있다. 그래서 더 궁금하기도 했고. 이게 대체 뭐하는 녀석이길래 다들 그렇게 사용할까? 1. RxJava란 무엇인가? 그에 앞서, 리액티브 프로그래밍에 대해 알고 가야 한다. 리액티브 프로그래밍이란, "데이터의 흐름과 전달에 관한 프로그래밍 패러다임"이다. p.s 우리가 흔히 알고 있는 객체지향 프로그래밍도 하나의 프로그래밍 패러다임..
오늘 "아키텍처를 알아야 앱 개발이 보인다" 라는 책을 공부하던 중, 한가지 이슈에 직면했다. ViewModel 파트 실습중이였는데, gradle 설정을 완료하였음에도 ViewModel 생성을 위한 ViewModelProvider 클래스가 생성되지 않는 이슈였다. 수정을 거쳐도 이미 deprecated된 ViewModelProviders가 나오거나 아예 엉뚱한 HasDefaultViewModelProvideFactory 였나? 뭔가 하는 이상한 클래스가 나왔다. 아래 코드는 developers에서 제공하는 최신 버전의 gradle이다. dependencies { def lifecycle_version = "2.6.0-alpha01" def arch_version = "2.1.0" // ViewModel ..
오늘은 많은 사람들이 애용하는 디자인패턴 중 하나인 Repository 패턴이다.1. Repository Pattern이란?ViewModel(Domain layer)과 Data 저장소 사이인 Data layer에 중간 계층(Repository)을 만들어 데이터의 출처에 구애받지 않고 동일한 인터페이스로 접근할 수 있게 만드는 패턴 여기서 동일한 인터페이스로 접근한다 라는 말의 뜻이 잘 이해가 되지 않을 수 있다. 간단한 예시를 들어보겠다. A라는 내부 DB에서 데이터를 가져오고, 추가적으로 B라는 외부 출처에서도 데이터를 가져와야하는 상황이다. 여기서 우리가 A와 B 둘 모두의 데이터에 접근 및 사용하기 위해서는 A라는 내부 DB에 대한 처리 + B라는 외부 DB 이 둘 모두에 대한 작업이 필요할 것이다..