의존성 관리

 

의존성 이란?


의존하고 있는 대상의 변경에 영향을 받을 수 있는 가능성

1
2
3
public class Movie {
  private DiscountPolicy discountPolicy;
}
cs

 

 

Movie는 DiscountPolicy를 의존한다 

 

의존성 방식


1) 생성자를 이용한 방식 

1
A a = new A(new B());
cs

 

2) setter를 이용한 방식

1
2
A a = new A();
a.setB(new B());
cs

 

3) method를 이용한 방식

1
2
A a = new A();
a.testMethod(new B())
cs

 

4) 생성자 + setter를 이용한 방식

1
2
A a = new A(new B());
a.setC(new C());
cs

 

new는 해롭다


new 연산자를 잘못 사용하면 클래스 사이의 결합도가 극단적으로 증가한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Movie {
  private DiscountPolicy discountPolicy;
 
  public Movie(String title, Duration runningTime, Money fee) {
    this.discountPolicy = new AmountDiscountPolicy(Money.wons(800)), 
 
                          new SequenceCondition(1),
                          new SequenceCondition(10),
                         ......);
 }
 
}
 
 
cs

- Movie 클래스가 구체 클래스(AmountDiscountPolicy)를 생성하는데 필요한 정보를 알아야  되기 때문에 결합도가 증가

 

1
2
3
4
5
6
7
8
public class Movie {
  private DiscountPolicy discountPolicy;
  
  public Movie(DiscountPolicy discountPolicy) {
    this.discountPolicy = discountPolicy;
    
  }
}
cs

- Movie 클래스가 구체 클래스를 생성하는데 필요한 정보를 몰라도 된다

 

 

결합도란?


결합도는 어떤 모듈이 다른 모듈에 의존 정도를 말한다.

 

강한 결합도

- 다양한 환경에서 클래스를 재사용할 수 없는 의존성

 

약한 결합도

- 다양한 환경에서 클래스를 재사용할 수 있는 의존성

 

Tags

Read Next