티스토리 뷰

객체간의 의존

어떤 클래스가 다른 클래스의 메소드를 실행할때 이를 의존한다고 한다.

또는 변경에 의해 영향을 받는 관계를 의미한다.

예를들어 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
링크
«   2026/02   »
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
글 보관함