토비의 스프링 Ver2

존스노우·2021년 11월 9일
0

스프링

목록 보기
2/22

런타임 의존관계 설정

의존관계

의존관계란 ?

B가 변하면 A에 영향으 미친다..

UserDao의 의존관계

인터페이스를 통해 의존관계를 제한해주면 변경에 있어서 자유로워지는 셈.

UserDao 오브젝트가 만들어지고 런타임시에 의존관계를 맺는 실제 사용대상인 오브젝트를
의존 오브젝트라고 함

의존관계주입?

의존 오브젝트와 그것을 사용할 주체 , 보통 클라이언트라고 부르는 오브젝트를 런타임시 연결해주는 작업

이런 의존관계 주입 핵심은 제 3의 존재가 도와주는대 애플리케이션 컨텍스트/빈팩토리/IOC 컨텍스트다

UserDao의 의존관계주입

DaoFactory가 역활을 해줌

DI컨테이너임.

주입이란? 외부에서 내부로 무언가를 넘겨줘야하는거고

이런개념은 자바에서 메소드를 실행하면서 파라미터로 래퍼런스를 전달해주는데

생성자로서 해결가능

두 개의 오브젝트 간에 런타임 의존관계 생성됨.

의존관계 검색과 주입

의존관계 검색

이런방식은 테스트일때 유용?

DI경우 원하는 오브젝트가 먼저 자기자신이 컨테이너가 관리하는 빈이 돼야 한다.

의존관계 주입의 응용

DI의 장점?

기능 구현의 교환

부가기능 추가


DI의 장점은 관심사의 분리(SoC)를 통해 얻어지는 높은 응집도에서 나옴

메소드를 이용한 의존관계 주입

지금까지는 생성자를 사용해 의존관계를 주입.

일반메소드를 사용해서 의존을 주입할수 있으며 더 자주사용된다.

수정자 메소드 이용 주입

setter 메소드 이용

수정자 메소드는 외부로부터 제공받은 오브젝트 래퍼런스를 저장해뒀다가 내부의 메소드에서 사용하게
DI방식에서 활용하기 적당

일반 메소드를 이용한 주입

수정자 메소드처럼 set으로 시작해야 하고 한 번에 한 개의 파라미터만 가질수 있다는게 싫다면?
여러 개의 파라미터를 갖는 일반 메소드를 DI용으로 사용 가능

XML 설정을 이용하는 방법도 있지만 pass 요즘 많이 안쓰는 방식인듯

DataSource 인터페이스로 변환

데이터커넥션을 가져오는 인터페이스

자바 코드 설정 방식

139~XML 데이터 소스 관련 읽어보기만 하자 이제는 잘안쓰는방식?
SI에서는 자주사용하는 방식인듯.

정리

  1. 책임이 다른 코드를 분리 두 개의 클래스로 만든다 (관심사 분리, 리팩토링)

  2. 바뀔 수 있는 쪽의 클래스는 인터페이스를 구현하고, 다른클레스에선 인터페이스를 통해서만 접근하도록함
    이렇게 하면 인터페이스를 정의한 쪽이 구현 방법이 달라져 클래스가 바뀌어도 그 기능을 사용하는 클래스의 코드는 같이 수정할 필요가 없다 (전략 패턴)

  3. 위를 통해 자신의 책임 자체가 변경되는 경우 외에는 불필요한 변화가 발생하지 않도록 막아주고
    자신이 사용하는 외부 오브젝트의 기능은 자유롭게 확장하거나 변경 할 수 있게 만든다(개방 폐쇄의 원칙)

  4. 오브젝트가 생성되고 여타 오브젝트와 관계를 맺는 작업의 제어권을 별도의 오브젝트 팩토리로 만들어 넘김
    또는 오브젝트 팩토리의 기능을 일반화한 Ioc 컨테이너로 넘겨서 오브젝트가 자신이 사용할 대상의 생성이나
    선택에 관한 책임으로부터 자유롭게 만들어 줬다 ( 제어의 역전 / Ioc)

5.싱글톤 패턴 구현방식 단점을 살피고, 서버에서 사용 되는 오브젝트로서의 장점을 살릴 수 있는 싱글톤을
사용 하면서 싱글톤의 패턴의 단점을 극복할 수 있도록 설계퇸 컨테이너활용법 (싱글톤 레지스트리)

  1. 설계 시점과 코드에는 클래스와 인터페이스 사이의 느슨한 의존관계만 만들어 놓고 런타임 시에 실제
    사용할 구체적인 의존 오브젝트를 제3자 (DI 컨테이너)의 도움을 주입받아 다이내믹한
    의존관계를 갖게 해주는 Ioc 특별한 케이스를 알아봄 (의존관계 주입 / DI)
  2. 의존 오브젝트를 주입할때 수정자 메소드 생성자 메소드가 있고 XMl도 있다.
profile
어제의 나보다 한걸음 더

0개의 댓글