Kotlin

    [Kotlin Coroutines] IntelliJ 사용해 Coroutines 디버깅 하기

    디버깅을 하기 위한 준비 Kotlin Coroutines는 일시 중단 후에는 다른 스레드에서 실행될 수 있기 때문에 디버깅을 하기가 매우 어렵다. 이 글에서는 디버깅을 하기 어려운 예 중에 가장 간단한 예시를 제시할 것이다. 다음의 코드를 보자. import kotlinx.coroutines.* fun main() = runBlocking { launch(Dispatchers.Unconfined) { println("launch1 Working Thread : ${Thread.currentThread().name}") delay(100) println("launch1 Working Thread : ${Thread.currentThread().name}") } launch { println("launch2..

    [Design Pattern] 커맨드 패턴이란 무엇인가?

    커맨드 패턴 커멘드 패턴은 하나의 객체를 통해 여러 객체들에 명령(Command)을 해야 할 때 사용되는 패턴이다. 커멘드 패턴을 사용하면 요청을 캡슐화해서 커멘드 객체가 명령을 해야하는 객체들에 대한 의존성을 느슨하게 만들 수 있다. 이 말이 무슨 말일까? 커멘드 패턴을 사용하지 않으면 여러 객체들에 명령(Command)를 하기 위해서는 명령을 하는 객체(커멘드 객체)가 명령을 받는 객체들을 알아야 한다. 예를 들어 집 안의 조명을 제어하는 LightController 클래스가 있다고 해보자. LightController는 제조사가 다른 조명들(MainLight, SubLight, BedRoomLight)에 대한 제어를 한다. LightController는 조명을 제어하기 위해 각 조명을 제어하는 메서..

    [Kotlin Factory Pattern] 팩토리 패턴이란 무엇인가?

    팩토리 패턴에 대한 오해 많은 사람들이 팩토리 패턴을 객체 생성을 위한 클래스를 사용하는 것으로 알고 있다. 실제로 많은 글들을 보면 팩토리 패턴을 공장에 input을 넣으면면 결과물이 나오는 그림으로 설명해놓는 것을 볼 수 있다. 하지만 위 패턴은 팩토리 '패턴'이 아니다. 어떻게 보면 Input에 따라 결과물을 다르게 만드는 전략 패턴의 일종으로 볼 수 있다. 보통 많은 사람들이 위와 같이 팩토리 패턴을 생각하는데, 위와 같은 팩토리를 "헤드퍼스트 디자인패턴"에서는 "심플 팩토리 관용구"라고 부르기도 한다. 그렇다면 팩토리 패턴이란 무엇일까? 팩토리 패턴이란? 팩토리 패턴은 객체를 생성하기 위해 필요한 인터페이스를 만든 후, 인터페이스를 구현하는 클래스에서 어떤 객체를 만들지 결정하는 패턴이다. 즉,..

    [Kotlin] JSONObject 사용해서 JSON 처리하기

    JSONObject란? JSONObject란 JSON 형식의 String을 처리하도록 도와주는 Java 라이브러리이다. JSONObject 사용 준비하기 JSONObject를 사용하기 위해 더미 JSON 파일이 있다고 가정해보자. { "title": "android", "version" : 1, "isValid" : false, "types": [ "class", "interface", "object" ] } 위 JSON은 Kotlin String으로는 다음과 같이 변환된다. val result = "{'title':'android', 'version' : 0, 'isValid' : false, 'types':['class',''interface','object']}" JSONObject 사용하기 JSO..

    [Android] LruCache 사용해 이미지 캐싱하기(Bitmap Cache)

    LruCache 란? LruCache객체는 안드로이드에서 캐시를 관리하기 위해 사용하는 메모리 캐시 객체이다. LruCache 객체는 LRU(Least Recent Used) 알고리즘을 사용하는데 간단히 말해서 최근에 조회된 것을 캐시에서 삭제하는 것을 늦추기 위한 객체이다. 즉, 오랫동안 접근되지 않은 메모리가 우선적으로 삭제된다. 안드로이드에서는 이 알고리즘에 대한 구현체를 제공하는데 바로 LruCache 클래스이다. LruCache 객체 내부를 보면 다음과 같이 선언되어 있다. *java 코드이니 감안해서 보도록 하자. public class LruCache { public LruCache(int maxSize) { .. } .. } 이 LruCache는 제네릭으로 선언되어 있는데 K가 캐시에 접근..