di(3)
-
[DI Framework] 어노테이션 개발
먼저 프레임워크에서 사용할 어노테이션을 개발해보자. 먼저 목록부터 살펴보자. @Bean @Configuration이 선언된 클래스의 메서드에 적용되며 해당 메서드를 빈으로 등록함을 의미한다. @Component @ComponentScan으로 탐색되며 해당 클래스를 빈으로 등록함을 의미한다. @ComponentScan 이 어노테이션이 선언된 클래스의 디렉터리부터 모든 하위 패키지를 순회하며 @Component를 탐색한다. @Configuration 메서드 방식으로 빈을 등록하기 위해 사용되며, 설정 파일이라는 의미를 담고 있다. @Injectable 이 어노테이션이 선언된 위치에 따라 빈을 주입함을 의미한다. 개발할 어노테이션들에 대해 살펴보았다. 이제 개발해보도록 한다. 어노테이션 개발은 크게 어렵지 않..
2022.01.18 -
[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