본문 바로가기

분류 전체보기253

[Java] 제네릭(Generic) 이란? 제네릭 (Generics) 이란자바에서 제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다.즉, 제네릭은 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 하며, 타입 파라미터는 코드 작성 시 구체적인 타입으로 대체되어 다양한 코드를 생성하도록 해준다. 자바에서 배열과 함께 자주 쓰이는 자료형이 리스트(List)인데, 다음과 같이 클래스 선언 문법에 꺾쇠 괄호 로 되어있는 코드 형태를 한번 쯤은 봤을 것이다.ArrayList list = new ArrayList();저 꺾쇠 괄호가 바로 제네릭이다. 괄호 안에는 타입명을 기재한다. 그러면 저.. 2025. 1. 31.
[Java] 스레드 생명주기와 스케줄링 스레드 상태스레드는 JVM에 있어 생명체와 같습니다.스레드는 태어나고(New), 실행하고(Runnable), 잠자고(Sleep), 대기하고(Wait), 종료(Terminated)하는 등의 생명주기(Life Cycle)을 가집니다.  NEW스레드가 생성되었지만 아직 실행할 준비가 되지 않은 상태입니다.Java에서 new Thread()에 의해 스레드 객체가 생성되면 NEW 상태가 됩니다. NEW 상태의 스레드는 스케줄링 되지 않기 때문에 실행될 수 없는 상태입니다.스케줄링이 뭔가요?JVM이 RUNNABLE(준비) 상태인 스레드 중에서 하나를 선택하여 실행시키는 과정입니다.이렇게 선택된 스레드는 CPU의 자원을 할당받아 실제로 실행됩니다.  원래 자바 스레드는 비선점으로 스케줄링을 합니다.하지만, Windo.. 2025. 1. 28.
[Android] Coroutine Dispatcher에 대한 고찰 - Deep Dive 우리는 Kotlin의 흐름과 몇 가지 기본 개념의 내부 작동을 탐구했지만, 코루틴 디스패처에 대해서는 깊이 파고든 적이 없습니다. 이번 포스팅을 통해 Coroutine DisPatcher에 대해 깊게 알아보는 시간을 갖고자 합니다.이를 분석해서 이것이 코드에 어떤 영향을 미치는지 살펴보겠습니다. Dispatcher란?Dispatcher의 사전적인 의미는 사람이나 차량을 필요한 곳으로 보내는 일을 담당하는 사람입니다.Kotlin 코루틴에서의 Dispatcher는 Coroutine들을 적절하게 쓰레드 또는 쓰레드 풀에 할당하여 실행시키는 Scheduler 역할을 하는 코루틴 Cntext의 일부라고 할 수 있습니다. Dispactcher의 종류로는 Default / IO / Main / Unconfinied가.. 2025. 1. 27.
[Android] 코루틴(Coroutine) 내부적으로 어떻게 동작할까? 코루틴을 사용해보면 약간 궁금한 게 있었다. 어떻게 함수가 중단되고 재개되고 가능한지 의문이 생긴다. 그래서 한번 코루틴 내부를 한번 파헤쳐 보도록 하자.  아래 포스팅한 내용은 KotlinConf 2017 - Deep Dive into Coroutines on JVM by Roman Elizarov 영상의 내용들이다. 결론적으로 말하면, 코루틴은 디컴파일되면 일반 코드일 뿐이다. Continuation Passing Style(CPS, 연속 전달 방식) 이라는 형태의 코드로 전환한다.  아래에서 자세히 알아보자. Continuation Passing Style(CPS)코루틴은 컴파일러에서 CPS 로 변환이 된다. CPS 는 일종의 연속된 콜백의 형태라고 한다. 그래서 어떻게 동작하는지 알아보자. su.. 2025. 1. 24.
[Android] RecyclerView의 원리 및 내부 동작 Android 앱을 개발할 때 리스트를 보여줘야한다면 가장 많이 사용되는 View는 RecyclerView일 것입니다.  우리가 RecyclerView를 사용하면서 아래와 같이 스크롤을 했을 때 체크하지 않은 아이템에도 체크가 돼 있는 현상을 겪었던 적이 있을 것입니다.  왜 이런 현상이 발생하는지 RecyclerView 내부 동작에 대해 깊게 알아보는 시간을 가져보도록 하겠습니다.   🌀 RecyclerView 이전의 시대RecyclerView가 등장하기 전, 안드로이드에선 어떤 리스트를 나타내는 뷰를 만들 때, ListView라는 것을 제공했습니다. 하지만 이 ListView에는 고질적인 문제가 존재했습니다. 대표적인 문제점은 아이템 리스트를 표현하는 ItemView의 갯수가 수 백개 이상으로 많아.. 2025. 1. 23.
[Android] 이미지 로딩 라이브러리 (Glide vs Picasso / Coil) 안드로이드에서 사용할 수 있는 많은 이미지 로더 라이브러리가 존재한다. 이전 포스팅에서도 언급했듯 개발자가 어떠한 라이브러리 없이 이미지를 로드하려고 한다면 고려해야하는 요소가 많이 존재하게되는데, 이를 third party에게 위임함으로써 걱정을 좀 덜게될 수 있다.대표적인 라이브러리의 종류로는 예전에 많이 쓰이던 AUIL부터 (but he is..👋), 현재에도 쓰이고 있는 Piccaso, Glide, Coil 등이 존재하는데 각각의 라이브러리들은 어떻게 사용하는지, 성능은 어떠한 차이가 있는지 간단하게 적어볼 예정이다. GlideGoogle에서 만든 이미지 로더 라이브러리인 Glide는 빠른 이미지 로딩, 버벅 거림과 끊김 현상이 발생하지 않는다는 점을 강조하고 있다Glide.with(this) .. 2025. 1. 22.