스프링 의존성 주입 시리즈를 만들며스프링에서의 의존성 주입은 스프링의 기초가 되는 기술 중 하나로, 스프링 애플리케이션을 제대로 만들기 위해서는 의존성 주입에 대한 적절한 이해가 필요하다. 하지만 내가 스프링을 공부하면서 느낀 점은 의존성 주입과 관련된 내용을 체계적으로 정리한 자료를 찾기가 않다는 점이었다. 나는 이미 안드로이드 개발을 하면서 Koin, Dagger, Dagger-Hilt 등의 의존성 주입 프레임워크를 경험한 적이 있기 때문에 내가 알고 있던 다양한 키워드를 동원해 내가 아는 지식들을 찾았지만, 스프링에서 의존성 주입에 대해 처음 접한다면 의존성 주입에 대한 지식을 체계적으로 정리하기 힘들 것 같다 느꼈다. 이에 스프링 의존성 주입에 대한 내용들이 한 번에 쭉 정리할 수 있는 자료가 있..
Kotlin
@PreDestroy란 무엇이며 언제 사용될까?@PreDestroy 어노테이션을 함수에 적용하면 해당 Bean이 소멸되기 직전에 메서드가 자동으로 호출되며, 주로 다음과 같은 작업에 사용된다. 1. 리소스 해제: 열려있는 파일이나 네트워크 연결 닫기2. 캐시 정리: 메모리에 저장된 임시 데이터 삭제3. 백그라운드 작업 종료: 실행 중인 스레드나 작업 중지 @PreDestroy 사용해보기@PreDestroy를 사용하는 방법은 간단하다. 단순히 Bean이 파괴되기 전 실행할 함수 위에 @PreDestroy를 붙인 후 내부에 실행할 코드를 작성하면 된다. 예를 들어 이전 글에서 다룬 SearchInMemoryCache에서 Bean이 파괴되기 전체 캐시를 지워야 한다고 해보자. 그런 경우 다음과 같이 clean..
ObjectProvider가 필요한 이유앞서 우리는 다음과 같이 ShoppingCart를 프로토 타입 Bean으로 만들고, 이를 싱글톤으로 선언된 CartController에서 사용하고자 했다. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)@Componentclass ShoppingCart { private val items: MutableList = mutableListOf() fun addItem(item: String) { items.add(item) } fun removeItem(item: String) { items.remove(item) }}@Component@Scope(ConfigurableBeanFa..
@Scope 어노테이션이 필요한 이유우리가 Bean을 만들 때 기본적으로 싱글톤으로 만들어진다. 즉, 한 번 생성되면 해당 Bean이 필요한 곳 모두에서 재사용된다. 만약 순수 함수로만 구성된 Bean이거나 애플리케이션 실행 도중 하나의 공통된 상태만 유지하면 되는 객체라면 이렇게 싱글톤으로 생성한 후 모든 곳에서 재사용하면 된다.하지만, 종종 상태를 가지면서 이 상태가 사용되는 곳마다 다르게 관리돼야 하는 Bean이 있다. 예를 들어 사용자를 위한 장바구니 객체를 만들었는데 사용자마다 다른 장바구니가 만들어져야 하는 경우가 있을 수 있다. 이런 경우에는 Bean이 필요할 때마다 새로운 인스턴스가 생성돼야 한다.Spring은 이러한 상황들을 위해 Bean이 생성되는 방식을 제공하는 @Scope 어노테이션..
@AutoWired란?스프링은 생성자 주입(Constructor Injection), 세터 주입(Setter Injection), 필드 주입(Field Injection) 이라 불리는 의존성을 주입하기 위한 세가지 방법을 제공한다. 그리고 이들은 @AutoWired란 어노테이션을 통해 주입된다. 지금부터 이 세가지 방법을 알아보자. 생성자 주입생성자 주입을 하기 위해서는 생성자 함수 constructor가 필요하다. constructor 앞에 @Autowired를 사용함으로써 생성자 주입을 할 수 있다. 예를 들어 UserCreator이 UserRepository를 주입 받는다면 다음과 같이 작성이 가능하다.@Componentclass UserCreator @Autowired constructor( ..