목록분류 전체보기 (44)
개발자이야기
RecycledViewPool 이번엔 RecycledViewPool을 이용하여 RecyclerView 를 최적화 하는 한가지의 방법에 대해 알아보겠습니다. RecyclerView 의 핵심은 단어 그대로 뷰의 재활용 입니다. 뷰의 새로운 생성은 화면의 버벅임을 유발하는 주범이 되며 이를 최적화 할 필요가 있습니다. 우린 위와같은 ui에서 RecyclerView 가 뷰를 재사용 해 줄 것을 기대하며 사용합니다. 하지만 모든 상황에서 위와같은 ui만 있을 순 없습니다. 아래의 예시를 보겠습니다. Google Play의 화면 입니다. 세로 RecyclerView 내에 동일한 형태의 가로 스크롤 RecyclerView 가 몇개 있는 것을 확인할 수 있습니다. 위의 가로 형태의 뷰가 완벽히 동일한 것이며 같은 ty..
bundle 이번엔 android bundle에 대해 알아보겠습니다. bundle이란?? 단순히 여러가지의 타입의 값들을 저장하는 묶음 이라고 생각 합시다. 그 안에서는 map을 이용하여 값들을 저장합니다. val bundle = Bundle() bundle.putString("key","value") 단순히 위와 같이 사용합니다. map 의 형식과 같으며 실제로 내부적으로는 map 을 사용하여 값을 저장합니다. Intent android 개발을 하다보면 필히 intent를 사용하며 값을 전달해야 하는 경우가 생깁니다. 그럴땐 우린 아래와 같이 값 전달을 합니다. val intent = Intent(this, Activity::class.java) intent.putExtra("data", "값 받아라!..
android launchMode 이번엔 android개발에 있어 꼭 제대로 이해하고 있어야 하는 launchMode에 대해 알아보겠습니다. launchMode standard AndroidManifest 에서 launchMode 설정을 하지 않는다면 기본으로 설정되는 값입니다. 단순히 액티비티를 화면에 쌓아올립니다. 이런식으로 standard로 설정된 activity는 계속해서 쌓이게 됩니다. singleTop 생성되는 인스턴스가 이미 현재 스택의 맨 위에 있다면 새 인스턴스를 생성하지 않고 onNewIntent() 메소드를 호출합니다. standard와 다른점은 현재 1의 text를 출력 해 주는 activity가 최상단에 있을경우 똑같은 activity를 intent를 활용해 생성하여도 activi..
android lifecycle 이번엔 android 수명주기에 대해 상황별로 알아보도록 하겠습니다. android 는 위와같은 수명주기를 갖고 있습니다. 화면과 함께 간단히 로그를 찍어서 살펴보겠습니다. 기본적인 상황 1. 메인 액티비티의 실행 onCreate ↓ onStart ↓ onResume 2. app background 상태 onPause ↓ onStop 백그라운드 상태에서 앱 재진입 onRestart ↓ onStart ↓ onResume 3. intent 실행 수명주기 2번인 위와 동일 위와같은 수명주기를 확인할 수 있습니다. onActivityResult (deprecated) onActivityResult는 deprecated 되었습니다. val result = registerForAct..
map, flatMap 유용한 함수 map과 flatMap에 대해 kotlin 코드로 알아보겠습니다. map 코틀린 Collections 에 정의된 함수 먼저 간단하게 살펴보겠습니다. public inline fun Iterable.map(transform: (T) -> R): List { //수신객체인 this 로 mapTo 함수 호출 return mapTo(ArrayList(collectionSizeOrDefault(10)), transform) } public inline fun Iterable.mapTo(destination: C, transform: (T) -> R): C { for (item in this) //수신객체인 this 를 반복 destination.add(transform(item..
다형성 이번엔 객체지향개념의 다형성에 대해 알아보겠습니다. interface 를 이용한 다형성을 코드로 알아봅시다. interface는 단순히 구현의 목적 달성을 위한 골격을 미리 잡아놓는다 정도로만 생각합시다. 좀더 자세한 설명은 코드를 작성하며 진행하겠습니다. 우리는 다양한것들을 항상 마주합니다. 큰틀의 무언가와 파생되는 많은것들이 있습니다. 아래의 코드를 한번 보겠습니다. public class Coffee { public String getCoffee() { return "아메리카노"; } } public class CoffeeMain { public static void main(String[] args) { Coffee coffee = new Coffee(); System.out.println..
캡슐화 이번엔 4대 객체지향개념 캡슐화에 대해 알아보려고 합니다. "정보은닉" 여기까지 오신분들이라면 정보은닉이란 얘기는 셀수없이 보셨을거라 생각합니다. 그래서 도대체 왜 정보은닉을 해야하는걸까요? 캡슐화(encapsulation) 속성(data fields)과 행위(methods)를 하나로 묶는다. 구현 내용 일부를 외부에 감추어 은닉한다. 우선 아래의 코드를 한번 보겠습니다. public class CalculationModel { int a; int b; } 위와같은 데이터 모델이 있다고 가정합시다. public class Math { CalculationModel dataModel = new CalculationModel(); public Math(int a, int b) { Calculation..
ReactiveX Subject (AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject) ReactiveX 공부를 시작하며 간단하게 Subject의 항목들과 작동 방식에 대해 알아볼까 합니다. AsyncSubject AsyncSubject는 방출된 최종값만을 받는다. subject.onComplete 호출 직전의 onNext 값만을 받을 수 있음. 다른 subject 들과는 다르게 subject.complete() 함수를 호출하는 순간 데이터 발행이 이루어진다. fun subject() { val subject: AsyncSubject = AsyncSubject.create() subject.subscribe { println("첫번째 구독 $it"..