본문 바로가기

분류 전체보기143

[Android/Kotlin] Retrofit에서 인터페이스를 활용한 API 요청 처리 원리 안드로이드에서 네트워크 요청을 쉽게 처리할 수 있도록 도와주는 대표적인 라이브러리인 Retrofit을 공부하면서, 한 가지 궁금한 점이 생겼습니다.Retrofit을 사용할 때 interface를 retrofit.create()에 넘겨주기만 하면 네트워크 통신이 자동으로 이루어진다는 점이었습니다.단순히 메서드를 선언한 인터페이스를 넘겼을 뿐인데, 실제 HTTP 요청이 발생하는 원리가 무엇인지 궁금했습니다.공부하면서 Retrofit이 인터페이스를 동적으로 구현하고, 내부적으로 HTTP 요청을 처리하는 과정을 이해하게 되었습니다.이번 글에서는 Retrofit이 API 요청을 어떻게 자동으로 처리하는지 정리해보겠습니다.Retrofit을 이용한 API 요청 흐름Retrofit을 사용할 때 interface를 정의.. 2025. 3. 12.
[Android/Kotlin] ViewModel 개념과 ViewModelStore를 통한 구성 변경 시 상태 유지 원리 안드로이드 컴포넌트의 생명 주기에 따라 데이터가 유실되지 않도록 하기 위해 ViewModel을 사용하는 것이 일반적이지만, 문득 구성 변경(Configuration Change)으로 인해 Activity가 파괴되는데도 어떻게 ViewModel이 유지될 수 있을까? 하는 궁금증이 들었습니다.ViewModel이 어떻게 상태를 관리하고 구성 변경 시에도 유지될 수 있는지 이해하기 위해 내부 코드를 직접 분석하고 정리한 내용을 공유하겠습니다. 또한, ViewModel의 개념과 사용 시 고려해야 할 사항들도 함께 정리하겠습니다.ViewModel이란?구성 변경이 발생해도 데이터를 유지하도록 설계된 컴포넌트입니다.Activity나 Fragment보다 생명 주기가 깁니다.하지만 앱이 종료되면 ViewModel도 함께 .. 2025. 3. 10.
[Android/Coroutine] 구조화된 동시성이란? 구조화된 동시성은 코루틴에서 중요한 개념으로, 코루틴이 부모-자식 관계를 통해 체계적으로 관리되는 방식을 의미합니다.이를 통해 코루틴의 실행 흐름을 명확하게 제어하고, 예측 가능한 방식으로 동시 실행을 관리할 수 있습니다.또한, 특정 범위(Scope) 내에서 코루틴을 실행함으로써 오류 처리를 용이하게 하고, 불필요한 리소스 낭비나 메모리 누수를 방지할 수 있도록 돕습니다.1. 구조화된 동시성의 핵심 개념1) 코루틴 스코프 (Coroutine Scope)모든 코루틴은 반드시 코루틴 스코프 안에서 실행됩니다.코루틴 스코프를 사용하면 코루틴이 언제 시작되고 종료되는지를 명확히 제어할 수 있습니다.대표적인 코루틴 스코프는 다음과 같습니다.CoroutineScope: 개발자가 직접 생성하여 관리 가능GlobalS.. 2025. 3. 7.
[Android/Hilt] @Provides vs @Binds: Hilt에서 객체를 주입하는 두 가지 방식 이전에 사이드 프로젝트를 진행하면서 의존성 주입을 할 때 어떤 곳에는 @Provides를 사용하고, 어떤 곳에는 @Binds를 사용하는 것을 보고 그 차이가 궁금했습니다. 당시에는 명확하게 이해하지 못한 채 사용했었지만, 학습을 진행하며 그 차이를 조금씩 이해하게 되었습니다. 이에 대한 내용을 정리하여 보다 명확하게 개념을 정리하고자 합니다.@Provides와 @Binds의 핵심 차이점구분사용 방식특징@Provides메서드 내에서 인스턴스를 반환인터페이스뿐만 아니라 일반 클래스 객체도 생성 가능@Binds구현체를 바인딩하는 방식인터페이스와 구현체 간의 관계를 선언적으로 설정@Provides를 사용하는 경우@Provides는 Hilt가 직접 @Inject를 붙여 생성할 수 없는 경우 사용해야 합니다.사용하.. 2025. 3. 7.
[Android/Hilt] @Qualifier와 @Named 이해하기: 같은 타입의 여러 의존성을 구별하여 주입 Hilt를 사용하다 보면 같은 타입의 여러 의존성을 주입해야 하는 상황이 발생할 수 있습니다. 이때, 어떤 객체를 주입해야 할지 Hilt가 알 수 있도록 구분하는 방법이 @Qualifier와 @Named입니다. 이번 글에서는 이 두 개념을 정리해보겠습니다.같은 타입의 의존성 주입 문제Hilt는 기본적으로 반환 타입을 기준으로 의존성을 주입합니다. 그러나 같은 타입의 여러 객체를 주입해야 하는 경우가 있을 수 있습니다.예를 들어, 두 개의 String 값을 의존성으로 제공하려고 할 때 문제가 발생할 수 있습니다.@Module@InstallIn(SingletonComponent::class)object StringModule { @Provides fun provideHelloString().. 2025. 3. 7.
[Android/Hilt] @Inject와 @Module, @Provides 이해하기 Hilt는 안드로이드에서 의존성 주입(DI, Dependency Injection)을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. Hilt를 사용하면 의존성 관리를 더욱 효율적으로 할 수 있으며, 코드가 간결해집니다. 특히 @Inject와 @Module, @Provides는 Hilt에서 가장 중요한 개념 중 하나입니다. 이번 글에서는 이 두 개념을 정리해보겠습니다.@Inject: 직접 만든 클래스의 의존성 주입@Inject는 직접 만든 클래스의 의존성을 Hilt가 자동으로 관리할 수 있도록 도와줍니다.@Inject constructor를 사용한 생성자 주입class ExampleRepository @Inject constructor() { fun getData(): String = "Hello.. 2025. 3. 7.
[Operating System & Concurrency] 프로세서, 프로세스, 스레드, 코루틴의 개념과 관계 정리 운영체제를 공부하면서 여러 번 관계성을 정리하려 했지만, 학습할 때마다 다시 헷갈리는 반복이 이어졌습니다. 흐름을 제대로 정리하고자 여러 유튜브 강의를 찾아보던 중, 유튜버 얄팍한 코딩사전님의 "프로세스는 뭐고 스레드는 뭔가요?" 영상을 보고 개념을 정리하는 데 많은 도움을 받았습니다. 이 글은 해당 영상에서 설명된 내용을 바탕으로 나중에 다시 참고하기 위해 정리한 글입니다.또한, 프로세서, 프로세스, 스레드의 관계를 이해한 후, 처음에는 스레드와 비슷하게 보였던 코루틴의 개념까지 정리하고 싶어 관련 블로그 글을 찾아 읽었습니다. 이 과정에서 발견한 글을 통해 스레드와 코루틴의 차이를 이해하는 데 큰 도움이 되었으며, 이를 바탕으로 최종적으로 본 글을 정리하게 되었습니다.혹시라도 이 글을 보게 된 분이라.. 2025. 3. 6.
[Algorithm/Kotlin] 백준 2630번 색종이 만들기: 분할정복을 활용한 풀이법 1. 문제 설명주어진 N × N 크기의 색종이가 하얀색(0)과 파란색(1) 으로 칠해져 있을 때,이를 모두 같은 색이 될 때까지 잘라 각 색상의 개수를 구하는 문제입니다.문제 조건N은 2^k (k = 1~7) 형태로 주어집니다. (즉, 2, 4, 8, 16, 32, 64, 128 중 하나)색종이가 한 가지 색으로만 칠해져 있다면, 더 이상 자르지 않고 해당 색종이 개수를 증가시킵니다.혼합된 색상이 있다면, 정사각형을 4등분하여 동일한 방식으로 재귀적으로 처리합니다.예제 입력81 1 0 0 0 0 1 11 1 0 0 0 0 1 10 0 0 0 1 1 0 00 0 0 0 1 1 0 01 0 0 0 1 1 1 10 1 0 0 1 1 1 10 0 1 1 1 1 1 10 0 1 1 1 1 1 1예제 출력97 즉,.. 2025. 3. 4.
[Algorithm/Kotlin] 백준 1260번 DFS와 BFS: 탐색 알고리즘 구현 및 원리 1. 문제 설명주어진 그래프에서 DFS와 BFS 탐색을 수행한 결과를 출력하는 문제입니다.방문할 수 있는 정점이 여러 개인 경우, 번호가 작은 정점부터 우선 방문해야 합니다.입력첫 번째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점 V가 주어집니다.이후 M개의 줄에는 양방향 간선이 연결하는 두 정점의 번호가 주어집니다.출력첫 번째 줄: DFS 탐색 결과두 번째 줄: BFS 탐색 결과정점 방문 순서대로 출력합니다.2. 문제 해결 아이디어DFS (Depth-First Search, 깊이 우선 탐색)스택(Stack) 또는 재귀(Recursion)를 이용해 탐색을 수행합니다.현재 정점에서 가능한 한 깊이 들어가며 방문한 후, 더 이상 갈 곳이.. 2025. 2. 27.
반응형