[Java] 의존 관계에 대해 예제와 함께 알아보자.

2023. 9. 26. 13:31·Programming Language/Java
목차
  1. 의존이란 무엇인가?
  2. 클래스끼리 의존 관계 맺기
  3. 인터페이스를 통한 의존 관계 맺기
  4. 강한 의존과 약한 의존
반응형

의존이란 무엇인가?

  • 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();
}
}

 

클래스끼리 의존 관계가 생기는 세가지 경우

  1. 다른 클래스의 레퍼런스 변수를 사용하는 경우
  2. 다른 클래스의 인스턴스를 생성하는 경우
  3. 다른 클래스를 상속받는 경우 

 

 

 

인터페이스를 통한 의존 관계 맺기

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번의 경우를 해결할 수 있습니다.

  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
  1. 의존이란 무엇인가?
  2. 클래스끼리 의존 관계 맺기
  3. 인터페이스를 통한 의존 관계 맺기
  4. 강한 의존과 약한 의존
'Programming Language/Java' 카테고리의 다른 글
  • [Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (2)
  • [Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (1)
  • [Java] stream API 와 Optional
  • [Java] stream API를 예제와 함께 알아보자.
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    SQL
    1330
    평년
    DB
    2753
    프로그래머스
    9498
    C
    SQL고득점키트
    백준
    2588
    윤년
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[Java] 의존 관계에 대해 예제와 함께 알아보자.

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.