반응형
의존 역전이란 무엇인가?
- 고수준 컴포넌트가 저수준 컴포넌트에 의존하지 않도록 의존 관계를 역전시키는 것
- 컴포넌트는 클래스를 의미
- 인터페이스로 의존 방향이 모이도록 하는 것
고수준 컴포넌트와 저수준 컴포넌트
의존 방향 ->
- 게시글 작성
- 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 |