반응형
의존이란 무엇인가?
- 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번의 경우를 해결할 수 있습니다.
- 다른 클래스의 레퍼런스 변수를 사용하는 경우
- 다른 클래스의 인스턴스를 생성하는 경우
강한 의존과 약한 의존
- 강한 의존 (강한 결합)
- 클래스끼리 의존 관계를 맺을 때
- 약한 의존 (느슨한 결합)
- 인터페이스를 통한 의존 관계를 맺을 때
- 객체지향적임
반응형
'백엔드 데브코스' 카테고리의 다른 글
[Java] 의존 주입 패턴 (0) | 2023.09.27 |
---|---|
[Java] 의존 역전 (0) | 2023.09.26 |
[Java] stream API 와 Optional (0) | 2023.09.26 |
[Java] stream API (0) | 2023.09.26 |
[Java] getter, setter, 생성자로 알아보는 객체지향적인 코드 (0) | 2023.09.25 |