본문 바로가기

BackEnd/Spring

스프링과 DI(Dependency Injection)- 의존 주입과의 관계


1. 의존이란?


어떠한 기능(예를 들면 어떠한 클래스의 메소드)을 실행하기 위해 다른 클래스를 필요로 할 때 


이를 의존(dependency)한다고 한다.


즉 의존한다는것은 객체를 사용한다는것으로 볼 수 있다.


2. 의존 객체를 직접 생성하는 방식의 단점


요구사항의 변화로 의존 객체가 쓰이는 클래스마다 객체를 모두 수정해 주어야 하는 비효율성.


3. Dependency Injection - 의존 주입


의존 객체를 직접 생성하는 것이 아닌, 외부로부터 전달받는 구현 방식이다.


예를 들면 생성자를 이용해서 의존객체를 전달 받는 방식.


4. DI의 장점


1) 단점과 반대로 , 요구사항이 변화하더라도 의존 객체만 한번 수정해 줄뿐, 주입하는 코드는 그대


로 이기 때문에 효율적이다.


2) 테스트 코드 작성시 가짜 구현 객체 사용 가능


주입해주고자 하는 클래스가 아직 미완성단계일때, 오버라이딩을 통해 가짜 구현 객체를 사


용 하여 테스트 해볼수 있다.


5.   Dependency Injection  방식


의존객체를 전달하는 방법은 2가지가 있다.


1) 생성자 방식


생성자 방식의 장점은 객체를 생성하는 시점에 의존하는 객체를 모두 전달받을 수 있다는 점


이다. 전달받은 파라미터가 정상인지 확인하는 코드를 생성자에 추가할 경우,객체 생성 이


후에는 그 객체가 사용 가능 상태 임을 보장할 수 있다.


생성자 방식에서의 단점은 생성자에 전달되는 파라미터의 이름만으로는 실제 타입을 알아내


기 힘들고, 생성자에 전달되는 파라미터의 개수가 증가할수록 코드 가독성이 떨어진다.


2) 프로퍼티 설정 방식


프로퍼티 설정 방식의 장점은 어떤 의존 객체를 설정하는지 메서드 이름으로 알 수 있 


다는 점이다. 단점은, 객체를 생성한 뒤에 의존 객체가 모두 설정되었다고 보장할 수 없어서 


사용 가능하지 않은 상태일 수도 있다.


6. 스프링과 Dependency Injection


스프링의 가장 기본적인 기능은 객체를 생성하고 초기화하여 필요로 하는 곳에 제공하는 


것인데,이 중심에는 DI(Dependency Injection)라는 설계 패턴이 적용되어 있다.


스프링은 설정 정보를 읽어와 객체를 생성하고 각각의 객체를 연결(조립기 역할)한 뒤에 


내부적으로 보관한다. 이렇게 생성한 객체를 보관하기 때문에 스프링을 객체 컨테이너(Object 


Container)라고도 부른다


'BackEnd > Spring' 카테고리의 다른 글

빈 객체 범위(scope)  (0) 2019.07.20
스프링과 DI(Dependency Injection)- 의존 주입과의 관계  (0) 2019.07.19
스프링(Spring) 프레임워크  (0) 2019.07.18
컨테이너  (0) 2019.07.18
메이븐  (0) 2019.07.18
AOP에 대한 이해  (0) 2019.05.21