@Bean 어노테이션 사용해 Bean 등록하기이전 글에서 유저 정보를 조작하는 UserRepository 인터페이스를 구현하는 객체가 InMemoryUserRepository와 DbUserRepository 두개가 있고, 이 중 하나를 UserCreator 클래스에서 사용한다고 했을 때 코드를 다음과 같이 구성했었다.interface UserRepository { fun createUser(id: String, user: String)}class InMemoryUserRepository(): UserRepository { override fun createUser(id: String, user: String) { println("User $user created with id: $..
Dependency Injection
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..
Dagger2란? Dagger2란 Java/Kotlin을 위한 의존성 주입 프레임워크이다. Dagger2에 Hilt를 결합한 버전인 Dagger-Hilt가 대세가 되고 있고, 다른 DI Framework과는 달리 컴파일 타임에 연산을 처리하여 런타임의 성능이 다른 DI Framework에 비해 나으므로 Dagger-Hilt가 대세가 될 것은 명백해 보인다. 하지만 다른 DI Framework들에 비해 새로운 개념이 많이 나와서 러닝커브가 높아 배우는데 시간이 오래 걸려 포기를 하고는 한다. (실제로 내가 Dagger2를 공부하는데도 시간이 오래 걸렸다ㅠ) 나는 공부를 하는데 왜 오래 걸리는지 이유를 찾았고, 그 이유로 명확한 예시가 없다. 설명이 모호하다. 지식이 파편화 되어 있다. 설명이 여러곳에 퍼져..