[Spring] 의존 역전에 대해 알아보자.

2023. 9. 26. 16:56·Spring
반응형

의존 역전이란 무엇인가?

  • 고수준 컴포넌트가 저수준 컴포넌트에 의존하지 않도록 의존 관계를 역전시키는 것
    • 컴포넌트는 클래스를 의미
  • 인터페이스로 의존 방향이 모이도록 하는 것

 

 

 

고수준 컴포넌트와 저수준 컴포넌트

의존 방향 ->

  • 게시글 작성
    • Controller -> Service -> Repository
    • Service -> Repository 에서는 클라이언트가 요청한 게시글이 DB 에 저장되도록 요쳥
  • 게시글 조회
    • Controller -> Service -> Repository
    • Service -> Repository 에서는 클라이언트가 요청한 게시글을 DB 에서 조회

 

 

현재 구조에서는 어떤 문제점이 있을까?

-> Service 에서 상황에 따라 필요한 Repository 를 바꿔야할 때, Service 의 코드를 바꿔줘야한다.

-> 고수준 컴포넌트인 Service 가 저수준 컴포넌트인 xxxRepository 에 의존하기 때문

 

  • 고수준 컴포넌트
    • Service -> 게시글을 저장한다
    • 무엇을 한다 : 기술에 종속적이지 않음 (추상적)
    • 구체적인 기술을 사용하지 않는 클래스
    • 정책, 비즈니스 로직 등
  • 저수준 컴포넌트
    • DatabaseRepository -> (게시글을 저장하는데) 데이터베이스를 사용한다
    • FileRepository           -> (게시글을 저장하는데) 파일을 사용한다
    • 어떻게 한다 : 기술에 종속적임 (구체적)
    • 구체적인 기술을 사용하는 클래스

 

 

 

 

의존 역전은 어떻게 할 수 있나?

고수준 컴포넌트와 저수준 컴포넌트 사이에 인터페이스를 끼워 넣는다.

 

Controller 도 잘 설계했다는 가정하에, 저수준 컴포넌트이다.

-> Controller 에서 클라이언트에게 입력받는 것을 키보드 입력으로 대체했을 때 Service 의 코드 변경이 필요 없다면

 

  • 레이어드 아키텍처
    • 계층을 나누고, 패키지로 구분
    • 각 계층간 의존성 방향을 제어

 

 

이 다음 시간에는 의존 주입 패턴에 대해서 말아보겠습니다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] 의존성을 주입해주는 주체 - jar, @Profile, @Order  (0) 2023.09.27
[Spring] 의존 주입 패턴을 예제와 함께 알아보자.  (0) 2023.09.27
[Spring] getter, setter, 생성자로 알아보는 객체지향적인 코드에 대하여  (0) 2023.09.25
[백엔드] 스프링 핵심 원리 기본편 정리  (0) 2023.04.27
[김영한 스프링 핵심 원리: 기본편] 간단하게 기록하기  (1) 2022.08.22
'Spring' 카테고리의 다른 글
  • [Spring] 의존성을 주입해주는 주체 - jar, @Profile, @Order
  • [Spring] 의존 주입 패턴을 예제와 함께 알아보자.
  • [Spring] getter, setter, 생성자로 알아보는 객체지향적인 코드에 대하여
  • [백엔드] 스프링 핵심 원리 기본편 정리
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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[Spring] 의존 역전에 대해 알아보자.
상단으로

티스토리툴바