Bean의 의존성 주입 우선 순위 관리가 필요한 이유다음과 같은 모양의 UserRepository와 두 개의 구현체 InMemoryUserRepository, DbUserRepository 가 있다고 해보자.interface UserRepository { fun createUser(id: String, user: String)}class InMemoryUserRepository(): UserRepository { override fun createUser(id: String, user: String) { println("User $user created with id: $id in InMemoryUserRepository") }}class DbUserRepository(): ..
의존성 주입
클래스 초기화 시 의존성을 주입하는 것이 필요한 이유이전 시간까지 우리는 String 타입이나 Int 같은 간단한 타입의 Bean만 만들었다. 하지만, 실제 애플리케이션을 만들 때는 클래스들이 다른 클래스에 의존하기 때문에 주입을 받아야 하는 상황이 많이 발생한다. 즉, 초기화를 위해 의존성을 주입 받아야 하는 상황이 많이 발생한다. 예를 들어 다음과 같은 UserCreator 클래스가 있다고 해보자.class UserCreator(private val repository: UserRepository) { fun createUserWithRandomId(user: String) { val id = UUID.randomUUID().toString() repository.cr..
의존성 주입을 알기 위해 미리 알아야 내용들[Spring] 의존성이란 무엇인가? 강한 결합과 느슨한 결합을 통해 이해하는 의존성[Spring] 느슨한 결합의 장점과 한계 자세히 알아보기 의존성 주입이란?의존성이란 하나의 객체가 다른 객체의 기능을 사용하는 것을 뜻한다. 일반적으로 다른 객체에 의존성이 있는 객체를 초기화 하기 위해서는 위해서는 의존성이 있는 객체를 직접 만든 다음 주입해주는 과정을 거친다. 예를 들어 다음과 같은 유저의 정보를 저장하고 가져오는 데이터 레이어 객체 UserRepository가 있다고 해보자.class UserRepository() { private val idToUserMap = mutableMapOf() fun getUser(id: String): String..
이 글을 이해하기 위해서는 의존성 주입에 대한 이해가 필수적이다. 의존성주입에 관해 모른다면 아래 글을 읽고 오도록 하자. 의존성 주입이란 무엇이며 왜 필요한가? 목표 의존성 주입이 무엇인지 이해한다. 의존성 주입이 왜 필요한지 이해한다. 의존성 주입이란? 의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다. 더 자세하게는 kotlinworld.com Koin과 의존성 주입의 구성요소 의존성 주입에는 주입할 객체를 저장하는 Container, 주입할 객체가 필요하다. Koin에서는 여기에 하나를 더해 주입할 객체를 모아놓은 모듈을 만들어내었다. 따라서 Network를 위한 객체들은 Network Module에 모아지고, Database를 위한 객체들을 Database Module에 모..
예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..