티스토리 뷰
객체간의 의존
어떤 클래스가 다른 클래스의 메소드를 실행할때 이를 의존한다고 한다.
또는 변경에 의해 영향을 받는 관계를 의미한다.
예를들어 A 클래스의 A1 메서드의 이름을 A2로 변경한다면, A 클래스의 A1 메서드를 사용하던 B 클래스의 코드도 변경되어야 할 것이다.
의존 주입
A 클래스가 B 클래스에 의존적이라면, 즉 A 클래스에서 B 클래스의 메서드를 사용해야 한다면 한 가지 방법으로는 B 객체를 직접 생성하는 것이다. B 객체를 직접 생성하고 B의 메서드를 사용하면 된다.
또다른 방법은 의존 주입이다.
의존 주입은 의존하는 객체를 직접 생성하는 대신 의존 객체 정보를 생성자로 받는 방법이다.
B b;
public A(B b) // 생성자
{
this.b = b;
}
이렇게 생성자를 통해 A 객체가 의존하고 있는 B객체를 주입받는다.
의존 주입 사용 이유?
그렇다면 직접 객체를 생성하지 않고 의존 주입 방식을 사용하는 이유가 뭘까?
여러가지 아직 내가 알지 못하는 이유들이 있겠지만 첫 번째는 변경의 유연함이다.
예를들어 클래스 내에서 직접 객체를 생성하는 방식을 생각해보자.
만약 B 클래스를 상속받는 B2 클래스를 만들었고, B2 클래스를 사용하려면 B 클래스에 의존적인 클래스들의 B 클래스를 사용하는 코드를 모두 수정해야 한다.
class A
{
B b = new B2(); // B2는 B를 상속
}
class C
{
B b = new B2();
}
하지만 만약 DI 방식을 사용했다면, 의존 주입 대상이 되는 객체를 생성하는 부분만 변경하면 된다.
B b = new B2(); // B2는 B를 상속받음
A a = new A(b);
C c = new C(b)
출처: 스프링5 프로그래밍 입문 (최범균 저)
'Web' 카테고리의 다른 글
| Ch03. DI 방식, Singleton (0) | 2022.06.23 |
|---|---|
| Ch03. Spring Container, ApplicationContext 설정 파일 (0) | 2022.06.01 |
| Ch02. 간단한 스프링 예제, 빈 객체 (0) | 2022.05.30 |
| Ch02. 스프링 시작하기, Maven (0) | 2022.05.30 |
| Spring 시작 (0) | 2022.05.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Brute Force
- C
- Kruskal
- BFS
- Spring
- 이분탐색
- CSS
- 자료구조
- MVC
- binary search
- Implementation
- Unity
- db
- DP
- graph
- Dijkstra
- floyd warshall
- 조합
- 재귀
- C++
- dfs
- priority queue
- recursion
- greedy
- Stack
- back tracking
- two pointer
- Tree
- Python
- permutation
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함
