Giken Dev
article thumbnail
Published 2023. 9. 26. 16:56
[Java] 의존 역전 백엔드 데브코스
반응형

의존 역전이란 무엇인가?

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

 

 

 

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

의존 방향 ->

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

 

 

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

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

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

 

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

 

 

 

 

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

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

 

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

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

 

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

 

 

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

반응형

'백엔드 데브코스' 카테고리의 다른 글

[Java] 의존성을 주입해주는 주체 - jar, @Profile, @Order  (0) 2023.09.27
[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
profile

Giken Dev

@기켄

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!