전체 글

전체 글

    Garbage Collection

    JVM이 구성된 JRE의 구성 요소 중 Garbage Collection은 객체를 생성한 이후에 더 이상 사용하지 않는 경우 메모리 릭을 방지하기 위하여 자동으로 메모리 해제를 수행한다. GC를 실행하기 위해서는 JVM 기반의 어플리케이션의 실행을 멈추는 'stop-the-world'가 발생하게 되는데, 'stop-the-world'가 발생하는 경우엔 GC를 실행하는 스레드를 제외한 나머지 스레드는 작업을 중단한다. 물론 GC를 완료하고 중단됐던 작업이 재개되지만 프로그램의 성능 최적화를 위해선 'stop-the-world'의 발생 빈도를 줄여 GC 성능 최적화가 필요하다. JVM의 메모리는 Class, Stack, Heap, Native Method, PC 이렇게 5가지로 구성되어 있는데 GC는 Hea..

    Process와 Thread

    프로세스는 운영 체제로부터 자원을 할당받아 동작하는 작업의 단위이고 스레드는 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에서 최소 하나 혹은 그 이상이 될 수 있다. 어플리케이션 하나가 프로세스이고, 그 안에서 발생하는 동작의 단위가 스레드이다. multi process와 multi thread 멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(Task)을 실행하게 된다. - 장점 : 하나의 프로세스에 문제가 생기더라도 다른 프로세스에 영향을 끼치지 않는다. - 단점 : 프로세스마다 독립된 메모리 영역을 할당받아 상호 공유하는 메모리 공간이 없어 (캐시 메모리 초기화 등) 무거운 작업의 context switching이 발생한다. *context swi..

    [Kotlin] 스레드와 코루틴

    스레드와 코루틴은 동시성을 보장하고, 비동기 작업을 하기 위해 많이 사용된다는 공통점이 있다. 동시성은 말그대로 여러가지 작업을 한번에 수행하는 것이지만, 실제 동작은 시분할 기법을 활용하여 여러 작업들을 조금씩 나누어 번갈아가며 실행기때문에 사용자입장에서는 여러 작업이 동시에 일어나는것처럼 느껴지게 된다. 비동기 작업은 특정 작업을 수행할 때 작업이 끝날 때까지 기다리지 않고 다른 작업을 수행할 수 있는 특징이 있다. 그런데, 스레드와 코틀린은 근본적으로 큰 차이점이 존재한다. 스레드는 각 Task에 해당하는 Stack메모리를 할당받고 동시에 여러 작업을 수행할때 OS는 어떤 스레드 작업을 먼저 수행해야 효율적인지에 대한 스케쥴링(선점 스케쥴링)을 한다. Task 단위는 Thread이며 JVM의 Sta..

    [Kotlin] CoroutineBuilder

    코루틴은 일시 중단이 가능한 작업 객체로 동시성을 지원하는 관점에선 스레드와 유사한점이 많다. 하지만 코루틴은 분명 스레드에서 동작하지만 그 어떤 스레드에 종속되진 않는다. 하나의 코루틴 작업을 스레드 이곳저곳을 돌아다니며 실행시킬 수 있기 때문이다. 이러한 코루틴을 만드는 방법은 CoroutineBuilder를 활용하는 것이다. CoroutineBuilder는 말그대로 코루틴을 만드는 코루틴 객체 생성자이다. CoroutineBuilder는 launch, async 이렇게 두 개로 볼 수 있다. launch, async를 알아보기에 앞서 Dispatchers에 대해 잠깐 알고 넘어가자. Dispatchers는 코루틴의 실행을 관리해주는 CoroutineContext로 스레드에 코루틴의 실행을 분배하거나..

    [Android] Android Architecture Components(AAC)

    구글에서 권장하는 아키텍처의 원칙은 '관심사 분리'와 '데이터 모델에서 UI 도출'이다. Activity나 Fragment와 같은 UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함되어야 한다. 위와 같은 클래스들은 최대한 가벼운 상태로 유지하여 수명 주기와 관련된 문제들을 피하고 테스트가 쉽도록 고려되어야 한다. 또한 OS가 언제든지 사용자에 의해 메모리 부족과 같은 시스템적인 조건으로 UI클래스들을 제거할 수 있기 때문에 로직의 성격에 따라 분리하여 UI클래스에 대한 의존성을 최소화하는 것이 좋다. 또한 UI는 데이터를 처리하는 모델에 의해 도출되어야 한다. 모델은 네트워크에 문제가 있거나 OS가 리소스를 확보하기 위해 앱을 제거해도 사용자의 데이터 또는 앱의 동작은 문제없이 지속..

    [Android] Retrofit2

    안드로이드에서 API 서버와 통신을 하기 위한 라이브러리로 Retrofit2, Volley, HttpUrlConnection, OKHttp 등이 있다. 그중에서 가장 많이 사용되고 있는 라이브러리는 'Retrofit2'이고 이 라이브러리에 대해 자세히 알아보자. Retrofit2는? - Android에서 REST API 통신을 지원하기 위해 만들어진 라이브러리. - 전달받는 데이터를 Client가 필요한 형태로 가공하여 전달받는 Type-Safe 한 HTTP 클라이언트 라이브러리. - AsyncTask 없이 Background에서 작업을 수행하고 Callback을 통해 메인 스레드에서 동작. - OkHttp 라이브러리의 상위 구현체. Retrofit2의 장점 빨라진 성능 복잡하지 않은 구현 반복되는 작업..