본문 바로가기

분류 전체보기140

[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.
[DataStructure/Graph] 완전 탐색 문제를 해결하는 두 가지 방법: 인접 행렬 vs 인접 리스트 완전 탐색 문제를 풀면서 완전 탐색을 구현하는 방식에는 두 가지 방법(인접 행렬과 인접 리스트)이 있다는 것을 알게 되었습니다.각 방식이 어떤 경우에 유리하게 활용되는지 문제를 통해 정리해 두면 좋을 것 같아 이번 글을 작성하게 되었습니다.이번 글에서는 완전 탐색을 인접 행렬과 인접 리스트를 사용하여 해결할 때의 차이점과 각각의 장단점을 두 가지 문제를 예제로 설명하겠습니다.1. 인접 행렬을 사용하는 경우1.1 인접 행렬(Adjacency Matrix) 개념배열(Array) 기반이며, BooleanArray를 사용하여 간선 유무를 표현합니다.graph[i][j] = true이면 i번 노드와 j번 노드가 연결된 것입니다.graph[i][j] = false이면 연결되지 않은 상태입니다.공간 복잡도: O(N^.. 2025. 2. 27.
[Operating System] 프로세서, 코어, 프로세스, 스레드를 쉽게 이해하기: 공장 비유로 살펴보기 처음에는 프로세스와 스레드의 관계를 이해한 것 같았지만, 프로세서 개념까지 생각하니 혼란이 생기기 시작했습니다. 이를 해결하기 위해 전체적인 개념을 비유를 통해 정리해보았습니다. 이 글은 프로세서, 코어, 프로세스, 스레드의 관계를 공장에 비유하여 쉽게 이해할 수 있도록 설명하는 데 중점을 두었습니다.프로세서, 프로세스, 스레드의 개념을 "공장"에 비유해서 설명해보겠습니다.프로세서(Processor)는 공장 전체입니다. 공장에는 여러 기계(코어)가 있어 작업을 처리합니다.코어(Core)는 공장 내의 개별 기계입니다. 실제로 제품을 만드는 일을 합니다.프로세스(Process)는 공장의 생산 라인입니다. 각 생산 라인은 독립적으로 운영됩니다.스레드(Thread)는 생산 라인에서 일하는 작업자입니다. 실제로 .. 2025. 2. 26.
[Android/Compose] Jetpack Compose를 통해 살펴보는 선언형 UI와 명령형 UI의 차이 Jetpack Compose를 공부하면서 "선언형 UI"라는 단어를 자주 접하게 되었습니다.Compose의 가장 큰 장점으로 꼽히는 선언형 UI가 기존의 명령형 UI와 어떤 차이가 있는지,그리고 왜 선언형 UI가 더 효율적인지에 대한 궁금증이 생겼습니다.이 글에서는 명령형 UI와 선언형 UI의 차이점,그리고 Jetpack Compose가 제공하는 선언형 UI의 장점에 대해 정리해보겠습니다.1. 명령형 UI와 선언형 UI란?UI를 구성하는 방법에는 크게 명령형 UI(Imperative UI)와 선언형 UI(Declarative UI) 두 가지 접근법이 있습니다.이 두 방식은 상태 관리와 UI 업데이트 방법에서 근본적인 차이를 보입니다.명령형 UI → 어떻게 그릴지를 개발자가 직접 명령선언형 UI → 무엇을.. 2025. 2. 25.
반응형