동시성과 병렬성의 차이

동시성(Concurrency)과 병렬성(Parallelism)은 다르다 동시성 동시성은 적어도 두 개의 스레드가 진행 중일 때 존재하는 조건이며, 가상 병렬 처리의 한 형태로 시간 분할(time-slicing)을 포함한다. 우리가 흔히 ‘동시’라고 이야기 하지만 컴퓨터(코어)는 한번에 하나의 명령어만 처리할 수 있다. 즉, 두개 이상의 알고리즘이 하나의 코어내에서 더보기…

코루틴이 경량 스레드인 이유 (Light-weight thread)

Why Coroutine is light-weight thread 코틀린 공식 문서에서는 코루틴을 경량 스레드(light-weight thread)라고 표현하고 있는데, 그 이유를 알아보자. 코루틴은 스레드에서 실행된다. 이것은 대원칙이다. 코루틴이 단독으로 또는 다른 수단에 의해 실행될 수 없다는 것을 명심하자. 그리고 여러개의 코루틴을 하나의 스레드를 지정하여 실행할 더보기…

Stackful 과 Stackless 코루틴의 차이

Stackful Coroutines vs Stackless Coroutines Stackful Coroutines 먼저 스택풀 코루틴(Stackful Coroutine)은 함수 호출시에 사용되는 분리된 스택을 가지고 있다. 코루틴이 어떻게 동작하는지 정확하게 이해하기 위해서 로우레벨 관점에서 간단히 함수 프레임과 함수 호출에 대해서 살펴볼 것이다. 하지만 먼저 스택풀 코루틴의 특성에 대해서 더보기…

젠킨스에서 build.gradle의 versionCode 및 versionName 수정하기

Motivation 다른 부서와 긴밀히 협업을 하다보면 요청에 의해 버전코드(versionCode) 및 버전명(versionName)을 빈번하게 바꿀 필요가 있다. 개발중에 이런 요청을 받으면 작업하던 내용을 Stashing하고, 버전코드를 수정하고 커밋&푸시한 뒤 다시 Unstashing… “아.. 어디까지 했더라?” 개발자들은 공감할 것이라 의심치 않는다. 개발중에 인터럽트가 들어오면 컨텍스트 더보기…

Parcelable을 자동으로 구현해주는 @Parcelize에 대해 알아보자.

@Parcelize kotlin-parcelize 플러그인은 Parcelable 구현을 자동으로 해준다. 새로운 클래스를 생성도 필요 없고 @Parcelize 어노테이션을 추가하는 것만으로 직접 Parcelable 관련 코드를 작성 한 것과 같이 동작한다. 컴파일타임에 바이트 코드 변조를 하기 때문에 추가되는 메서드 및 런타임시 오버헤드 비용도 발생하지 않는다. 그리고 더보기…

SingleLiveEvent 개선하여 더블 클릭 방지 하기!

SingleLiveEvent 개선하기 개요 SingleLiveEvent에 대한 설명은 이전 포스팅을 참조하자. Jetpack 라이브러리의 Android Arhitecture Component의 등장이후로 ViewModel과 LiveData를 열심히 사용중이다. View에 대한 ViewModel의 의존관계를 완벽하게 끊어냄으로써 기존에 사용하던 이벤트 처리 방식을 변경 해야 했다. 이벤트 리스너를 뷰컨트롤러(Activity/Fragment)에 구현하는 방식을 많이 사용했는데, 더보기…

운영체제의 Process와 Thread 이야기

Process와 Thread 이야기 프로세스(Process) 다음과 같이 위키에서 프로세스의 정의를 발췌했다. In computing, a process is the instance of a computer program that is being executed by one or many threads.   컴퓨터 분야에서 프로세스는 컴퓨터 프로그램의 인스턴스로, 하나 이상의 스레드를 더보기…

안드로이드의 Context를 이해하고, 메모리 누수를 방지하기

안드로이드의 Context란 무엇일까? Context란 사실 단어 그대로 맥락(Context)을 의미하며, 현재의 상태를 나타낸다. 다음 내용을 읽어보면 좀 더 Context를 이해하는데 도움 될 것 같다. Context에 대한 중요한 몇 가지 사실들! Application의 현재 상태를 Context를 통해 표현한다. Activity 그리고 Application의 정보를 Context를 더보기…

안드로이드 Paging3 컴포넌트 정복하기 – Part2 (네트워크에서의 페이징과 로컬 데이터 캐싱)

안드로이드 Paging3 컴포넌트 정복하기 – Part2 지난 Part1 에서는 Paging3 전반적인 내용과 PagingSource를 통해 네트워크로부터 페이징 된 데이터를 로드하고 화면에 나타내는 방법에 대해서 살펴보았다. 이번 포스팅에서는 오프라인 상태 또는 커넥션이 불안정한 상태에서도 앱 사용성을 보장하여 향상된 사용자 경험을 제공하는 방법에 더보기…

안드로이드 Paging3 컴포넌트 정복하기 – Part1 (페이징 된 데이터를 로드하고 화면에 나타내기)

안드로이드 Paging3 컴포넌트 정복하기 – Part1 Paging3는 Jetpack 라이브러리 중 하나로 다양한 데이터 소스로 부터 데이터를 나누어 효과적으로 로딩할 수 있게 한다. Paging3는 네트워크 또는 로컬 데이터베이스에서 쉽게 데이터를 불러올 수 있도록 도와주기 때문에 개발 시간을 단축시켜 준다. Paging3는 구글에서 더보기…