spring(4)
-
[Spring] FactoryBean
접하게 된 계기 강의를 듣던 중 강사님께서 DB에서 값을 받아오기 위한 빈을 FactoryBean을 구현해서 만드는 것을 보게 되었다. 평소에 @Component나 @Configuration, @Bean을 통해서 빈을 생성했는데 이렇게 만드는 방법도 있다는 것을 보게 되었다. 스프링의 빈 등록 스프링은 지정된 클래스 이름을 가지고 Reflection API를 이용해서 빈을 생성한다. 내부적으로 빈 정의에 나오는 클래스 이름을 가지고 빈을 생성한다. 문제 스프링에서 DI할 수 없는 클래스의 빈이 있을 수 있다. 예를 들어 클래스 정보를 미리 알아낼 수 없는 경우이다. Java에서는 Dynamic Proxy로 만드는 객체의 경우 클래스가 무엇인지 미리 알 수 없다. 클래스 자체도 내부적으로 새로 정의해서 사..
2023.03.15 -
[DI Framework] DI 프레임워크 개발
개발 동기 인프런에서 백기선님의 '더 자바: 코드를 조작하는 다양한 마법' 강의를 수강했다. 강의를 통해 어노테이션 프로세서, 바이트 코드 조작, 리플렉션 등에 대해 기본적인 지식을 습득할 수 있었다. 이 중에 리플렉션을 통해 간단하게 필드 주입 DI 프레임워크를 개발해보는 시간이 있었다. 필자는 스프링처럼 생성자 주입, 필드 주입까지 해보고 싶어 이 프로젝트를 시작하게 되었다. 스프링의 DI 방식 개발에 앞서 스프링의 DI 방식을 살펴보도록 하자. 스프링에서는 @Configuration의 @Bean이 선언된 메서드 또는 @Component가 선언된 클래스를 빈으로 등록한다. 필자도 이 방식을 채택하기로 했다. 빈을 저장하기 위한 컨텍스트를 생성한다. 컨텍스트에서 맵으로 빈을 관리한다. @Componen..
2022.01.18 -
2. IOC와 DI
앞서 살펴봤듯이 기본적인 다형성으로는 OCP와 DIP를 충분히 지킬 수 없었다. 이는 DI를 통해 해결할 수 있다. 1. 도메인 설계 휴대폰 매장을 오픈한다고 가정해보자. 클라이언트는 통신사에 해당하는 휴대폰을 개통할 수 있을 것이다.사장님은 SKT, KT, LG U+ 중에 어떤 매장으로 오픈할지 정하지 못하셨다. 일단은 KT로 생각 중이라고 하신다. 그렇다고 손만 빨고 있을 수는 없다. 다형성을 이용해 미리 개발해놓도록 하자. 이를 역할과 구현을 분리하여 클래스 다이어그램으로 표현하면 다음과 같다. 이를 간단하게 코드로 구현해보자. public interface MemberService { void open(); } public class MemberServiceImpl implements Member..
2021.11.22 -
1. 객체지향 설계와 스프링
1. 스프링의 탄생 배경 초기의 자바 웹 개발은 EJB를 통해 개발했다. 당시에 분산 시스템, 트랜잭션 등과 같은 기능을 지원하고 ORM, 객체지향적 설계 등이 적용된 통합적인 프로그램이었다. 하지만 개발자가 사용하기가 상당히 어렵고 느리다는 단점이 있었다. 그래서 로드 존슨이라는 개발자가 EJB를 비판하며 책을 내는데 이것이 스프링의 시작이 된다. 스프링이라는 이름도 EJB라는 겨울에서 봄(Spring)이 왔다는 뜻으로 붙여진 이름이다. 2. 스프링의 핵심 개념 기술을 배울 때 가장 중요한 것은 그 기술이 어떤 문제를 해결하기 위해 탄생했는지, 핵심 원리가 무엇인지 파악하는 것이다. 그 외의 것들은 부가적인 부분인 것이다. 이를 깨우치면 아무리 기능이 많아지더라도 빠르게 기술을 습득할 수 있다. 스프링..
2021.11.22