개발노트

[개발노트] 기본적인 의존성(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. 패키지 사이의 의존성 사이클을 제거하자

양방향 사이클이 있다면 같은 패키지여야 한다.

반응형