///
Search
✍️

객체 지향 설계

태그
JAVA
"A는 B클래스에 의존적이다"를 설명하는 방식
A - - - → B
그럼 의존 관계의 종류는?
클래스 의존성의 종류?
A ——> B (Associa tion) 연관관계
class A{ private B b; } // 연관관계의 정의 A에서 B로 이동이 가능해요라는 의미, 또는 경로를 가진다.
Java
복사
A - - - → B (Dependency) 의존관계
class A{ public B method(B b){ return new B(); } } /* 의존관계는 간단하게 코드상에서 파라미터에 그(B) 타입이 존재하거나 리턴타입에 그(B) 타입이 존재하거나 메소드 안에서 그 타입의 객체를 생성하는 것이라고 정의할 수 있다. */
Java
복사
연관 관계의 경우 A에서 B로 영구적으로 갈 수 있는 형태를 말하고 의존관계의 경우 특정 시점에서 A에서 B로 일시적으로 관계를 맺고 헤어지는 의존관계
A ——> B (Inheritance) 상속 관계 A extends B
A - - - → B (Realization) 실체화 관계 A implements B
상속 관계와 실체화 관계의 차이 상속 관계 : 구현이 바뀌면 영향을 받음 실체화 관계 : interface의 시그니처가 바뀔때만 영향을 받음
패키에서 포함된 클래스 사이의 의존성
패키지 A 와 패키지 B 가 있다면 A - - - → B 패키지 형태라면?
패키지 A의 클래스 A는 B 패키지의 클래스 B에 의존적이다. 그렇다는 말은 B 클래스의 변경은 A클래스의 변경이라는 말과 같다 좀 더 심플하게 생각하면 의존관계를 어떤방식으로 알아보는가? import 가 존재한다면 의존성을 가지게 되는 것이다.
좋은 의존성이란? 아니 피해야하는 의존성이란?
양방향 의존성을 피해라
A B Bi-Directional
// 양방향 class A{ private B b; public void setA(B b){ this.b = b; this.b.setA(this); // (?) 동기화 작업 } } ... class B{ private A a; public void setB(A a){ this.a = a; } } /* 이렇게 된다면 A가 바뀔때 B가 바뀌어야하고 그 반대로도 마찬가지다 이런경우는 원래 하나의 클래스인데 강제로 찢어놓은 꼴이다. 그렇다면 이걸 사용하려면 어떻게 해야할까? (?)에서 처럼 동기화 작업이 필요하다. 가급적이면 피할 수 있으면 피해라 단방향의 형태로 */
Java
복사
A → B Uni-Drectional 단방향
class A{ private B b; public void setA(B b){ this.b = b; } } ... class B{ ... }
Java
복사
다중성이 적은 방향을 선택하라
one-To-Many 일대다 A (1)—→ (*)B
class A{ private Collection<B> bs; } ... class B{ ... }
Java
복사
Many-To-One 다대일 A(1) ←—(*)B
class A{ ... } ... class B{ private A a; }
Java
복사
의존성이 없다면 제거하라!
패키지간의 의존성?
똑같이 cycle이 돈다는 관계는 피해야 한다.
관계의 종류 결정하기
연관관계 협력을 위해 필요한 영구적인 탐색구조
의존관계 협력을 위해 일시적으로 필요한 의존성(파라미터, 리턴타입, 지역변수)
방향성이 중요하다.