Bean의 이름이 설정되는 방법Bean의 이름은 @Bean 어노테이션이 붙은 함수의 이름으로 자동 설정된다. 예를 들어 다음과 같이 Bean들이 설정되어 있다고 해보자.@Configurationclass DefaultContainerConfiguration { @Bean fun blogName(): String { return "KotlinWorld" } @Bean fun blogAge(): Int { return 3 }} 그러면 blogName 이라는 이름의 Bean은 "KotlinWorld"라는 값을 가지고, blogAge 라는 이름의 Bean은 3이라는 값을 가져 아래 그림과 같은 모양이 된다. @Bean의 name 프로퍼티 사용해 Bean..
Spring/Dependency Injection
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이 제공하는 IOC Container을 만드는 방법Spring에서는 IOC Container을 만들기 위해 다양한 방법을 제공한다. Annotation을 기반으로 동작하는 IOC Container을 만들 수도 있고, xml을 기반으로 동작하는 IOC Container을 만들 수도 있다. 하지만 xml을 기반으로 동작하는 IOC Container은 이제는 거의 사용되지 않기 때문에 이번 글에서는 Annotation을 기반으로 동작하는 IOC Container을 만드는 방법을 살펴본다. Annotation을 기반으로 동작하는 IOC Container 만들기Annotation을 기반으로 동작하는 IOC Container는 AnnotationConfigApplicationContext 라는 클래스를 ..
의존성 주입을 알기 위해 미리 알아야 내용들[Spring] 의존성이란 무엇인가? 강한 결합과 느슨한 결합을 통해 이해하는 의존성[Spring] 느슨한 결합의 장점과 한계 자세히 알아보기 의존성 주입이란?의존성이란 하나의 객체가 다른 객체의 기능을 사용하는 것을 뜻한다. 일반적으로 다른 객체에 의존성이 있는 객체를 초기화 하기 위해서는 위해서는 의존성이 있는 객체를 직접 만든 다음 주입해주는 과정을 거친다. 예를 들어 다음과 같은 유저의 정보를 저장하고 가져오는 데이터 레이어 객체 UserRepository가 있다고 해보자.class UserRepository() { private val idToUserMap = mutableMapOf() fun getUser(id: String): String..
느슨한 결합의 장점느슨한 결합을 사용하게 됐을 때의 장점은 크게 다음 두가지가 있다.1. 변경 혹은 리펙토링이 편해진다.2. 컴파일 타임의 최소화 지금부터 각각이 무엇을 뜻하는지 알아보자. 1. 변경 혹은 리펙토링이 편해진다.클래스만을 사용해 구현을 하게 되면, 해당 클래스의 역할이 처음에 생각했던 범위를 넘어서는 일이 자주 생긴다.예를 들어 검색을 하는 클래스와 검색 결과 상태를 저장하는 클래스가 분리되어 있다고 하고, 검색을 하는 클래스는 검색 결과 클래스에 의존성이 있기 때문에 이 상태값을 알 수 있는 상황을 가정해보자. 누군가 검색 결과 상태를 검색을 하는 클래스로부터 가져올 수 있으니 검색을 하는 클래스로부터 검색 결과를 가져오는 로직을 추가하게 되면 검색을 하는 클래스는 졸지에 검색 결과 상태..