본문 바로가기

Development/Spring Boot

[Spring Boot] 비즈니스 요구사항과 설계 (2-2) 회원 도메인 실행 및 테스트

1- 코드와 다이어그램

- 클래스 다이어그램: 정적 다이어그램

- 객체 다이어그램: 동적 다이어그램 (왜냐 실제 동작해야 알 수 있기 때문.)

 

2- 테스트 프레임워크

- 출력 찍어서 확인하려면 모든걸 다 실행해야하는 번거로움 발생

- 이에 JUNIT 사용!

- Assertions에서 테스트 (비교 등)을 위한 메서드들이 주어지는데 [ org.assertj.core.api ]에서 주어지는 것에 좋은 API들이 많음

- GIVEN - WHEN - THEN 패턴

 

3- 강의. 현재까지 코드의 설계상 문제는 무엇일까요?

 - 정답 듣기 전 하늘 생각

   OCP 법칙이 지켜지지 않는다는 것.

요구사항에 따라가자면 회원 저장소는 아직 어떻게할지 미확정임. 그래서 우선 개발하는 단계에서는 자바 메모리를 활용한 회원 저장소로 구현했는데, 이는 나중에 바뀌어야 한다는 것!

 

근데 현재 memberRepository는 MemberRepository라는 역할(인터페이스, 추상화)와 MemoryMemberRepository (구현체, 구체화) 두 가지에 의존하고 있으며, 향후 자바 메모리가 아닌 자체 DB 혹은 외부의 무언가로 회원 저장소가 결정되게 될 경우 

이런식으로 코드를 작성해야해 기능 확장에는 열려있고 변경에는 닫혀있는 OCP 원칙에 위배되기에 해당 부분이 현 코드의 문제라 생각됨.

 

- 센세의 정답!

OCP 원칙을 잔 준수하는지. 그리고 DIP(의존 역전의 원칙)을 잘 지키고 있는지. 생각해보면 됨.

--> DIP. 추상화와 구현체 두 가지 모두에 의존하고 있어 문제가 발생하는 것. DIP는 구현체(구체화)가 아닌 추상화에 의존해야함.

--> OCP. 그렇기에 기능 확장/변경시 코드를 변경해야한다는 문제 발생.