@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: $..
스프링
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..
IOC Container에 등록된 모든 Bean의 이름 가져와 출력하기IOC Container에 등록된 모든 Bean의 이름을 가져오기 위해서는 AnnotationConfigApplicationContext의 beanDefinitionNames 프로퍼티를 사용하면 된다. 이를 사용하는 방법을 알아보기 위해 먼저 Configuration 파일을 다음과 같이 만들어 Bean이 blogName과 blogAge 두개 등록될 수 있도록 해보자.@Configurationclass DefaultContainerConfiguration { @Bean fun blogName(): String { return "KotlinWorld" } @Bean fun blogAge(): Int ..
의존성 주입을 알기 위해 미리 알아야 내용들[Spring] 의존성이란 무엇인가? 강한 결합과 느슨한 결합을 통해 이해하는 의존성[Spring] 느슨한 결합의 장점과 한계 자세히 알아보기 의존성 주입이란?의존성이란 하나의 객체가 다른 객체의 기능을 사용하는 것을 뜻한다. 일반적으로 다른 객체에 의존성이 있는 객체를 초기화 하기 위해서는 위해서는 의존성이 있는 객체를 직접 만든 다음 주입해주는 과정을 거친다. 예를 들어 다음과 같은 유저의 정보를 저장하고 가져오는 데이터 레이어 객체 UserRepository가 있다고 해보자.class UserRepository() { private val idToUserMap = mutableMapOf() fun getUser(id: String): String..