"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

오늘이군

스프링 삼각형 - IoC/DI 본문

삶../프로그래밍

스프링 삼각형 - IoC/DI

오늘이군 2017. 5. 16. 17:56
반응형

1, 추천 글

https://www.youtube.com/watch?v=al4NfBp3VLI

http://expert0226.tistory.com/199

https://www.youtube.com/watch?v=KCs2hXM-2E0

https://www.youtube.com/watch?v=w9rZCy90Q4M 55분~

http://blog.naver.com/todoskr/220833180218


2. IoC (Inversion of Control) : 제어의 역전

가. 의미

1) 객체 생성 및 생명주기의 관리 까지 모든 객체에 대한 제어권이 개발자가 아닌 스프링 컨테이너에게 넘어가 버린 것입니다.

2) 스프링은 개발자 대신 객체를 관리하기 위해서 컨테이너를 갖고 있기 때문에 Spring 프레임워크를 Spring 컨테이너, IoC 컨테이너로도 부릅니다.

나. 왜 개발자가 직접 객체생성, 관계설정 작업을 하지 않고 객체관리 작업을 프레임워크에 위임하는가?

1) 개발자가 객체관리를 클래스 내부에서 직접처리하게 되면 연관된 클래스들은 강결합 관계가 된다. 강결합 결합도를 갖게되면 다른 객체를 사용하고자 할 때 코드를 수정해야 변화를 적용할 수 있다.

public class OrderManager {

// private HyundaiMaker maker;

private KiaMaker maker;


public OrderManager() {

// maker = new HyundaiMaker();

maker = new KiaMaker();

}

}

가) 인터페이스의 도입

public interface CarMaker {

public Car sell(Money money);

}

public class KiaMaker implements CarMaker {

@Override

public Car sell(Money money) {}

}

public class OrderManager {

private CarMaker maker;

public OrderManager() {

maker = new KiaMaker(); // 인터페이스를 도입했는데도 아직 변화의 취약한 부분이 남아있다.

}

}

인터페이스는 실체화 할 수 없으므로 우리는 객체를 생성할 때 실체가 무엇인지 명시해야만 한다.

문제의 원인은 개발자가 객체를 직접 생성하는 데 있다. 그렇다면 개발자가 직접 객체를 생성하지 않으면 강결합의 문제가 해결된다고 볼 수 있다. 개발자가 직접 객체를 생성하는 능동적 프로그래밍 방식을 포기하고 객체를 받아서 사용하는 수동적 객체관리 프로그래밍 방식으로의 패러다임의 변화가 야기되었다.

나) 수동적 객체관리 프로그래밍

public class OrderManager {

private CarMaker maker;

public void setMaker(CarMaker maker) {

this maker = maker;

}

}

※ 객체를 직접 생성하지 않고 외부에서 주는 대로 사용한다.


3. DI (Dependency Injection) : 의존성 주입

가. 의미

1) 컨테이너에 의해 객체를 사용할 수 있도록 생성 후 메서드 (생성자, setter 함수) 를 통해 주입해준다.

나. 연관 : 전략(스트레티지) 패턴, DIP, OCP


4. IoC DI
가. 토비의 스프링
1.7.3 의존관계 검색과 주입

스프링이 제공하는 IoC 방법에는 의존관계 주입만 있는 것이 아니다. 

코드에서는 구체적인 클래스에 의존하지 않고, 런타임 시에 의존관계를 결정한다는 점에서 의존관계 주입과 비슷하지만, 의존관계를 맺는 방법이 외부로부터의 주입이 아니라 스스로 검색을 이용하기 때문에 의존관계 검색(dependency lookup)이라고 불리는 것도 있다. 

의존관계 검색은 자신이 펼요로 히는 의존 오브젝트를 능동적으로 찾는다. 

물론 자신이 어떤 클래스의 오브젝트를 이용할지 결정하지는 않는다. 

그러면 IoC라고 할 수는 없을 것이다. 

의존관계 검색은 런타임 시 의존관계를 맺을 오브젝트를 결정하는 것과 오브젝트의 생성작업은 외부 컨테이너에게 IoC로 맡기지만 이를 가져올 때는 메소드나 생성자를 통한 주입 대신스스로 컨테이너에게 요청하는 방법을 사용한다.

나. 초보람보


반응형

'삶.. > 프로그래밍' 카테고리의 다른 글

스프링 삼각형 - PSA  (0) 2017.05.16
스프링 삼각형 - AOP  (0) 2017.05.16
디자인패턴 요약  (0) 2017.05.16
객체지향설계 5원칙 - DIP  (0) 2017.05.16
객체지향설계 5원칙 - ISP  (0) 2017.05.16

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Comments