본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

스프링 부트에서 토비 3.1 따라하기 : 1장 - 1.7 DI 의존관계 주입 (작성 중)

by 청춘만화 2019. 2. 28.

스프링 부트에서 토비 3.1 따라하기 

1장 오브젝트와 의존관계 - 1.7 DI 의존관계 주입 

개발환경 

- OS : mac

- STS : 4.0.1

- MySQL : Server version: 8.0.13 Homebrew

- Frame-Work : 일단 최대한 의존성 없이 운영될 수 있도록 jar로 만 진행


관련 링크 

- 스프링 사용자 모임_홈페이지     http://www.ksug.org/

- 스프링 사용자 모임 질의응답     https://groups.google.com/forum/#!topic/ksug/13vB4tCFqrI

- 2017 스프링캠프                       https://www.youtube.com/playlist?list=PLdHtZnJh1KdZ6NDO9zc9hF4tONDLTSEUV



1장 오브젝트와 의존관계 

1.7 DI 의존관계 주입 

다소 포괄적인 의미를 지닌 'IoC 컨테이너' 에서, 이후 새로운? 새로 명명된? 이름 의존관계 주입 dependency injection  DI 에 대해 알아보자 


1.7.0  previously 프리비어슬리 

그 동안의 내용을 정리하면 IoC는 스프링에서만 사용되던 것이 아니라 소프트웨어서 자주 발견할 수 있는 일반적인 개념이라는 점을 알았다.

그리고 IoC 개념이 반영된, 팩토리 클래스를 통해 객체를 생성하여 관계를 맺어주는 방법, 그리고 그 기본 개념이 적용된 템플릿 메소드 패턴 형태와 서블릿 컨테이너처럼 서버에서 동작하는 서비스 컨테이너 방식 등의 예제를 실습해보았다.   


1.7.1 
 제어의 역전 IoC 과 의존관계 주입  

결국 스프링이 컨테이너고 프레임워크이니 기본적인 동작원리가 모두 IoC 방식이라고 할 수 있지만, 여타 프레임워크와 차별화돼서 제공해주는 기능은 의존관계 주입이라는 새로운 용어를 사용할 때 분명히 드러나게 된다.

  DI dependency injection 에 대한 번역


1.7.2 
 런타임 의존관계 설정 

1. 의존관계 

기본개념에 대한 이해해보는 시간 

   

개인적으로는 UML의 화살표 방향이 적응이 안된다. 이유는 모르겠는데 자꾸 반대로 해석하게 된다. 그래서 뇌피셜 방식의 재정의를 해본다. 

화살표를 큐피트의 사랑의 짝대기라고 생각하기로 한다. 아.. 그러면 확 와 닿는다.. 지금 A는 B를 짝사랑 하고 있는 거다... ㅜㅜ


2. UserDao의 의존관계 

지난 예제에 대입해서 이해해보는 시간 

설계모델 관점의 의존관계와 런타임(오브젝트) 관점의 의존관계 비교


1.7.3. UserDao의 의존관계 주입

1) 일단, DaoFactory 다시 살펴보기 

package springbook.user.dao;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration 
public class DaoFactory {
	
	// UserDao 타입의 오브젝트를 생성하고 초기화해서 돌려주는 역할 담당 
	@Bean 
	public UserDao userDao() {
		UserDao userDao = new UserDao(connectionMaker()); 
		return userDao;
	}
	
	//ConnectionMaker 타입의 오브젝트를 생성하는 역할 담당 
	@Bean 
	public ConnectionMaker connectionMaker() {
		return new DConnectionMaker();
	}
}


2) 클래스/코드 레벨의 의존관계  :  IoC 이전에 작성했던 코드이다.

클래스/코드 레벨의 의존관계

public class UserDao {
        // 관계설정 책임 분리 전의 생성자 
	public UserDao( ) {
		connectionMaker = new DConnectionMaker( );
	}
        ... 중략 
}


3) 런타임 시의 의존관계 주입과 사용 의존관계 : IoC 이후에 수정된 코드이다.

런타임 시의 의존관계 주입과 사용 의존관계

public class UserDao {

	private ConnectionMaker connectionMaker;
	
	// 두 오브젝트 사이의 런타임 의존관계를 설정해주는 의존관계 주입 자업을 전도하는 존재이며, 
	// 동시에 IoC방식으로 오브젝트의 생성과 초기화, 제공 등의 작업을 수행하는 컨테이너
	// = 의존관계 주입을 담당하는 컨테이너 = DI 컨테이너 =  IoC/Di 컨테이너, 
	// DaoFactory는 
	// "UserDao를 생성하는 시점에" + 주입(파라미터로 만들어진 DConnectionMaker의 오브젝트의 레퍼런스를 전달)한다 
	public UserDao(ConnectionMaker connectionMaker) {
		this.connectionMaker = connectionMaker;
	}
        ... 중략 
}


4) DI는 자신이 사용할 오브젝트에 대한 선택과 생성 제어권을  외부에 넘기고 자신은 수동적으로 주입받은 오브젝트를 사용한다는 점에서 IoC 개념에 부합한다.

5) 스프링 컨테이너의 IoC는 주로 의존관계 주입 또는 DI라는 데 초점이 맞춰져 있다. 그래서 스프링은 IoC 컨테이너 외에도 DI 컨테이너, DI 프레임워크 라고 부르는 것이다. 


1.7.3. 의존관계 검색과 주입

( 길다.. 다음에 이어서)







댓글