개발노트
[개발노트] 기본적인 의존성(dependency) 관리 법칙
별토끼.
2021. 10. 21. 00:39
반응형
- 우아한테크세미나를 듣고 일부 기록하였습니다.
Dependency(의존성)
- 클래스 의존성
- 패키지 의존성
클래스 의존성 종류
연관 관계 : 영구적인 협력
class A {
private B b;
}
의존 관계 (의존성X) :일시적으로 협력
- 파라미터에 특정 타입이 나온다.
- 리턴타입에 특정 타입이 나온다.
- 메서드 안에서 특정 타입의 인스턴스 생성
class A {
public B method(B b) {
return new B();
}
}
상속 관계
- 구현이 바뀌어도 영향
class A extends B {
}
실체화 관계
- 인터페이스가 바뀌었을 때 영향
class A implements B {
}
패키지 의존성
- 패키지에 포함된 클래스 사이의 의존성
- 클래스 열었을 때 import에 다른 패키지 있으면 dependency가 있는 것
핵심 의존성 관리 법칙
1. 양방향 의존성을 피해라
// 하나의 클래스에 있어야했다. (싱크도 맞춰줘야 한다)
class A {
private B b;
public void setA(B b) {
this.b = b;
this.b.setA(this);
}
}
class B {
private A a;
public void setA(A a) {
this.a = a;
}
}
아래같이 단방향으로 바꾸자.
class A {
private B b;
public void setA(B b) {
this.b = b;
}
}
class B {
}
2. 다중성이 적은 방향을 선택하자
- One-To-Many
class A {
private Collection<B> b;
}
class B {
}
- Many-To-One
성능 이슈가 적고, 객체들의 관계 유지가 더 편리
class A {
}
class B {
private A a;
}
3. 의존성이 필요없다면 제거하자
- 단방향
class A {
private B b;
}
class B {
}
- 없음
class A {
}
class B {
}
4. 패키지 사이의 의존성 사이클을 제거하자
양방향 사이클이 있다면 같은 패키지여야 한다.
반응형