반응형
- 우아한테크세미나를 듣고 일부 기록하였습니다.
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. 패키지 사이의 의존성 사이클을 제거하자
양방향 사이클이 있다면 같은 패키지여야 한다.
반응형
'개발노트' 카테고리의 다른 글
Kubernetes 이해하기 - 1 (with. minikube) (0) | 2022.10.10 |
---|---|
정적 분석 도구 Sonarqube 란? (0) | 2021.08.20 |
[개발지식] 딥링크(DeepLink) 개념 알아보기 (2) | 2021.08.14 |
두고 두고 볼만한 자주 쓰는 명령어 모음 - Linux, SecureCRT 등 (+추가중) (0) | 2021.08.02 |
[개발 팁] Mac, Chrome, IntelliJ 자주 쓰는 단축키 모음 (6) | 2020.05.17 |
댓글