반응형
의존이란 무엇인가?
- A 는 B 에 의존적이다.
- A 는 B 의 변화에 민감하게 반응한다.
- B 는 A 의 변화에 민감하게 반응한다고 할 수 없다.
- 물건의 가격은 공급에 의존적이다.
- 물건의 가격은 공급에 민감하게 반응한다.
- 공급은 물건의 가격의 변화에 민감하게 반응한다고 할 수 없다.
클래스끼리 의존 관계 맺기
public class RealMessageSender { public void send() { // 실제로 메시지 보내기 } } public class FakeMessageSender { public void send() { // 메시지는 안보내고 메시지를 보냈다는 로그만 찍기 } } // Client 는 FakeMessageSender 에 의존 public class Client { public void someMethod() { // 메시지 보내기 전 실행되는 어떤 작업 FakeMessageSender messageSender = new FakeMessageSender(); messageSender.send(); } }
클래스끼리 의존 관계가 생기는 세가지 경우
- 다른 클래스의 레퍼런스 변수를 사용하는 경우
- 다른 클래스의 인스턴스를 생성하는 경우
- 다른 클래스를 상속받는 경우
인터페이스를 통한 의존 관계 맺기
public interface MessageSender { void send(); } public class RealMessageSender implements MessageSender { public void send() { // 실제로 메시지 보내기 } } public class FakeMessageSender implements MessageSender { public void send() { // 메시지는 안보내고 메시지를 보냈다는 로그만 찍기 } } public class Client { private MessageSender messageSender; // 의존성 주입 Client(MessageSender messageSender){ this.messageSender = messageSender; } public void someMethod() { // 메시지 보내기 전 실행되는 어떤 작업 FakeMessageSender messageSender = new FakeMessageSender(); messageSender.send(); } }
messageSender 를 테스트용인 fake 로 쓰다가 real 로 바꿔야할 때에는, client 의 생성자에 real 을 넣어주기만 하면 됩니다.
이렇게 클래스가 아닌, 인터페이스를 통해서 의존 관계를 맺으면,
테스트와 실제 환경을 번갈아 사용할 때 용이합니다.
인터페이스를 통해서 의존 관계를 맺음으로써 1번과 2번의 경우를 해결할 수 있습니다.
- 다른 클래스의 레퍼런스 변수를 사용하는 경우
- 다른 클래스의 인스턴스를 생성하는 경우
강한 의존과 약한 의존
- 강한 의존 (강한 결합)
- 클래스끼리 의존 관계를 맺을 때
- 약한 의존 (느슨한 결합)
- 인터페이스를 통한 의존 관계를 맺을 때
- 객체지향적임
반응형
'Programming Language > Java' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (2) (0) | 2023.09.29 |
---|---|
[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (1) (0) | 2023.09.27 |
[Java] stream API 와 Optional (0) | 2023.09.26 |
[Java] stream API를 예제와 함께 알아보자. (0) | 2023.09.26 |
[Java] if문이 너무 많다면, 리팩토링을 해보자. (0) | 2023.09.25 |