객체의 의존성
한 객체가 다른 객체를 참조(사용)하고 있다면, 객체 사이에 의존성이 존재하게 된다.
A가 B를 사용한다.
A가 B에 의존한다.
위와 같은 상황은 다음과 같이 말할 수 있다.
B의 변화가 A에 영향을 준다.
객체 사이의 의존성은 실제 코드로 살펴보면 다음과 같은 형태로 나타난다.
이처럼 하나의 객체가 다른 객체를 직접 생성하여 가지고있다면 객체 사이에 강한 결합이 존재하게 된다. 위 코드에서 repository의 다른 구현을 테스트하고자 한다면 객체 생성 부분의 코드를 수정하여야 한다. 또한, 변경사항이 생길때마다 기존의 코드를 수정하여야 할 것이다. 이런 상황을 피하기 위해 의존성 주입 패턴을 적용시킬 수 있다.
의존성 주입(Dependency Injection)
의존성 주입(DI)이란 디자인 패턴 용어로, 하나의 객체가 다른 객체에 의존성을 제공하는 패턴이다. 의존성 주입 패턴에서는 사용하고자 하는 객체의 실제 구현체를 나중에 할당하는 것으로 미룰 수 있으며, 이를 통해 같은 코드를 여러 가지 구현에 사용할 수 있다. 의존성 주입을 사용하면 객체간의 결합이 느슨해지고 객체들을 독립적으로 분리할 수 있어 유지보수성이 좋아진다. 의존성 주입 패턴을 적용하여 보다 일반적인 의미로 쓰이는 IoC(Inverse of Control, 역제어)를 구현할 수 있다.
Spring에서의 DI
Spring Framework의 Container를 통해 DI를 쉽게 사용할 수 있다. Container는 응용 프로그램을 구성하는 bean이라는 객체를 관리하며 필요한 객체를 찾아 알아서 주입해준다. 간단한 사용 예시는 다음과 같다.
1. 객체를 사용하는 쪽 (@Autowired)
사용할 객체의 field에 @Autowired 어노테이션을 표기하여 의존성 주입을 사용할것임을 명시한다.
2. 의존성 주입을 수행하는 쪽(@SpyBean)
의존성 주입을 수행하는 쪽(예시에서는 test 함수)에서는 @SpyBrean 어노테이션에 어떤 구현 클래스를 사용할것인지 명시하여 다음과 같이 선언한다.
위 코드를 실행할 경우, 실행 단계에 spring이 해당하는 클래스의 bean을 찾아 1번의 @Autowired 변수에 할당해주며 프로그램이 동작하게 된다.
인터페이스를 사용해서 실제 구현은 나중에 넘겨주는 패턴까지는 이해했는데
spring에서 동작시키려니까 혼란스럽다.. 미래의 내가 이해하길 바래
'개발노트' 카테고리의 다른 글
Lombok, Builder Pattern (0) | 2020.03.24 |
---|---|
REST API (0) | 2020.03.19 |
[Spring] 가짜 객체(Mock Object) (0) | 2020.03.18 |
Test Driven Development 실습 (0) | 2020.03.12 |
[Spring Boot] Spring Boot 시작하기 (0) | 2020.03.11 |