ㅇ정적 의존관계(Static Dependency): 컴파일 시간에 결정되며, 주로 클래스 간의 관계를 의미
쉽게 이야기해서 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.
특징:
- 컴파일 타임: 정적 의존관계는 코드가 컴파일될 때 결정된다. 즉, 소스 코드에서 어떤 클래스가 다른 클래스를 참조하거나 사용하는 경우, 이 의존관계가 컴파일러에 의해 확인된다.
- 명시적 선언: 클래스가 다른 클래스를 사용하는 경우, 그 클래스의 인스턴스를 생성하거나 메서드를 호출하는 코드가 명시적으로 작성된다.
- 파일 참조: Java에서는 import 문을 통해 다른 클래스를 참조하거나 사용하는 것을 확인할 수 있다.
ㅇ동적 의존관계(Dynamic Dependency): 프로그램이 실행되는 런타임에 확인할 수 있는 의존관계
인자로 어떤 객체가 전달될지는 프로그램을 실행해 봐야 알 수 있다. 어떤 경우에는 A 인스턴스가 넘어올 수 있고, 또 어떤 경우에는 B 인스턴스가 넘어올 수 있다. 이렇게 런타임에 어떤 인스턴스를 사용하는지를 나타내는 것이 동적 의존관계이다.
특징:
- 런타임: 동적 의존관계는 프로그램이 실행되는 동안 발생한다. 이는 실행 시점에 어떤 객체들이 서로 상호작용 하는지를 나타낸다.
- 다형성: 동적 의존관계는 다형성(polymorphism)에 의해 영향을 받을 수 있다. 예를 들어, 인터페이스를 통해 객체를 참조하면, 실행 시점에 어떤 실제 클래스의 인스턴스가 사용될지 결정된다.
- 의존성 주입: 객체의 의존성을 런타임에 주입(DI, Dependency Injection)할 때 동적 의존관계가 형성된다.
[정적 의존관계 vs 동적 의존관계]
- 결정 시점: 정적 의존관계는 컴파일 시점에 결정되며, 동적 의존관계는 런타임 시점에 결정된다.
- 유연성: 정적 의존관계는 비교적 고정된 관계를 가지지만, 동적 의존관계는 런타임에 유연하게 변경될 수 있다. 예를 들어, 다형성이나 의존성 주입을 통해 동일한 코드가 다른 구현체와 협력할 수 있다.
- 코드 작성 방식: 정적 의존관계는 코드 내에서 명시적으로 드러나며, 어떤 클래스가 어떤 클래스를 사용하는지 코드만으로 확인할 수 있다. 반면 동적 의존관계는 실행 시점에 객체 간의 상호작용을 통해서만 파악할 수 있다.
- 의존성 주입: 동적 의존관계는 주로 의존성 주입 기법(DI)을 통해 구현되며, 이는 객체 간의 결합도를 낮추고 코드의 유연성을 높이는 데 기여한다. 정적 의존관계는 코드 레벨에서 직접 객체를 생성하거나 호출하여 결합도가 더 높을 수 있다.
※ 보통 단순히 의존관계, 또는 어디에 의존한다고 한다면 주로 정적 의존관계를 뜻하는 것이다.
'소프트웨어공학 > OOP' 카테고리의 다른 글
[OOP] 메서드 체이닝(Method Chaining) (0) | 2024.08.22 |
---|---|
[OOP] 불변 객체와 메서드명 관례 - withXxx() (0) | 2024.08.20 |
[OOP] OCP(개방 폐쇄 원칙)과 디자인 패턴 (0) | 2024.08.12 |
[OOP] UML 표기법 (0) | 2024.08.09 |
[OOP] 객체 vs 인스턴스 (0) | 2024.08.05 |