본문 바로가기

Java, Spring/스프링 핵심 원리 기본

3-3. 관심사의 분리 (극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 중요)(극도로 ..

이전 코드는 레오나르도 디카프리오가 줄리엣 역할을 하는 여자 주인공을 직접 초빙하는 것과 같다.

( 배우는 배우역할만하자 )

 

공연을 구성하고 담당배우를 섭외하고 역할에 맞는 배우를 지정하는 건 공연기획자가 한다. ( 배우와 공연 기획자의 책임을 확실히 분리하자. )

실제 실행되는 객체들은 본인의 역할만 수행해야하고 인터페이스에 어떤 구현체가 할당될지는 공연기획자가 해야한다.

 

공연 기획자 = AppConfig

 

 

 

 

 

 

이전 코드

이전 코드를 보면 배우가 다른 배우를 섭외했다. ( MemberServiceImpl 이 MemoryMemberRepository를 섭외 )

 

 

 

 

-----------------------------------------------------------아주 중요--------------------------------------------------------------------

 

1. MemberServiceImpl

AppConfig 클래스
MemberServiceImpl

# 내가 이해한 순서.

1. AppConfig 에서 new MemberServiceImpl 할 때 밑에 있는 MemberRepository를 매개변수로 가지는MemberServiceImpl 생성자가 불려옴. 거기에 MemoryMemberRepository를 new해서 넣어줌. 밑사진인 MemberServiceImpl의 memberRepository 객체필드는 MemoryMemberRepository의 객체를 가리키게된다.

 

===> 이제 MemberServiceImpl은 추상에만 의존 ===> DIP 만족

 

 

 

 

 

 

 

2. OrderServiceImpl

 

이걸

이렇게 만들어 주자.

생성자를 과감하게 만들어주자.

OrderServiceImpl은 필드가 두개이므로 생성자도 파라미터 두 개짜리로 만든다.

 

이렇게 final로 해도 생성자에만 넣어두면 상관없다. ( 빨간줄은 무시 )

AppConfig.java

OrderServiceImpl은 필드가 두개이므로 생성자도 파라미터 두 개짜리로 만든다.

 

==>>> OrderServiceImpl은 역할만 알고 있다. ( 구현은 모른다. ) ( 역할 = 로미오역할, 구현 = 디카프리오 )

 

 

 

 

 

 

 

--------------------1) MemberServiceImpl

OrderServiceImpl은 역할에만 의존하고 있다. ( 구현은 모른다. ) ( 역할 = 로미오역할, 구현 = 디카프리오 )

 

MemberServiceImpl은 이제부터 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

MemberServiceImpl은 이제부터 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

MemberServiceImpl은 이제부터 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

MemberServiceImpl은 이제부터 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

MemberServiceImpl은 이제부터 의존관계에 대한 고민은 외부에 맡기고 실행에만 집중하면 된다.

AppConfig 는 구현체를 만들어준다고 생각하자. ( 인터페이스와 연결까지 )

AppConfig 는 구현체를 만들어준다고 생각하자. ( 인터페이스와 연결까지 )

AppConfig 는 구현체를 만들어준다고 생각하자. ( 인터페이스와 연결까지 )

AppConfig 는 구현체를 만들어준다고 생각하자. ( 인터페이스와 연결까지 )

 

 

 

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

이게 중요하다.

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

DI 에 대하여 ( 아주 중요 )

 

 

 

--------------------2) OrderrServiceImpl

 

OrderServiceImpl 입장에서는 생성자를 통해 어떤 구현 객체가 들어올지는 알 수 없다.

 

 

 

-----------------------------------------------------------------------------------------

 

예전에 테스트를 위해 만들었던 MemberApp

예전엔 주석처리한 줄 처럼 new 해줬지만 이제 AppConfig에서 꺼내와야한다.

 

인터페이스 = appConfig.구현체 주입

 

MemberServiceImpl을 만들고 내가 만든MemberServiceImpl는 MemoryMemberRepository를 사용 할거야.

 

 

 

OrderApp

OrderService도 똑같이 넣어준다.

 

 

 

 

 

----------------------------3. Test 부분도 고쳐주어야한다.

잘 생각해보기.

 

OrderServiceTest도 똑같이.

 

 

 

 

# 최종 정리

 

 

 

 

이제까지 너무 많은 역할과 책임이 MemberServiceImpl, OrderServiceImpl 에 있었다.

애플리케이션 전체 구성을 책임지는 담당자인 AppConfig를 만들었다.

Recent Posts
Popular Posts
Recent Comments