spring initilizr로 일단 뼈대만 설정해둔다. 순수 JAVA로 먼저 짜보고, SPRING으로 다시 한번 짜면서 SPRING을 왜 쓰는지를 알려주신다고 하니 잘 들어보자.
비즈니스 요구사항과 설계
회원 도메인 설계
클라이언트가 있고, 그들이 사용할 기능은 회원 서비스 즉, 회원가입과 회원조회가 있다. 그리고 거기에 곧장 DB와 같은 것들을 붙일 수도 있겠지만, 그게 아니라 회원 저장소라는 인터페이스를 따로 만들어주고, 저장소에 대한 구현을 메모리 회원 저장소, DB 회원 저장소, 외부 시스템 연동 회원 저장소로 나누어 구현한다고 한다 - 왜냐하면 미확정이라고 했기 때문에.
여기서 핵심은, "회원 저장소"라는 회원을 저장하는 공간을 마련해두면 메모리 회원 저장소로 지금은 두더라도 DB 회원 저장소와 외부 시스템 저장소로 언제든 대체할 수 있게끔 한다는 것이다. 여기서 인터페이스와 구현체의 차이가 나오는 것.
자, 설계를 할때 주로 이렇게 3개의 다이어그램을 만든다고 한다.
1 회원 도메인 협력 관계는 기획자들도 함께 보는 것이고 높은 수준의 협력 관계, 이를 구체화하여 개발자가 만든 게
2 회원 클래스 다이어그램이다. 그런데 여기에는 인터페이스와 클래스, 동적으로 결정되는 아이들 모두 나와서
3 회원 객체 다이어그램은 실행 시점에 실제로 사용되는 부분들을 표현한 것이다.
회원 도메인 개발
회원 클래스 다이어그램을 토대로 개발해보자-!
* 자, 이제 windows 상에서의 eclipse 단축키를 배우는 재미도 좀 느껴보자.
constructor, getter, setter 등을 만드는 windows 단축키는 alt + insert
그리고 끝에 ;까지 함께 붙여주려면 ctrl + shift + enter
member > Grade Enum으로 만들고,
요구대로 이렇게 타입을 만들어 줌. 이 부분을 필수는 아닐 듯 하나 진필님도 비슷하게 했던 걸 보면 저게 옳은 방식인가 싶다.
member > Member 해서 실상 도메인과 같은 것을 만들어준다. Member라는 클래스.
member > MemberRepository 해서 인터페이스를 만들어주고,
member > MemoryMemberRepository 만들고 그 안에 MemberRepository의 구현체를 만들어준다.
구현체 만들 때의 단축키는 없다. customize 해줘야 하지만 이건 추후에 맥을 사서 거기에 넣자.
member > MemberService 만들고 서비스 인터페이스 만들어주고
마지막으로 member > MemberServiceImpl로 서비스에 대한 구현체도 만들어주었다!
관련해서 테스트케이스도 만들어줬다.
주문과 할인 도메인 설계
discount 폴더에 인터페이스와 구현체 만들어주고, order 폴더에 인터페이스와 구현체 만들어주고, 추가로
order 객체를 만들었는데 이건
이렇게 생겼다.
=> 이렇게 JAVA로만 프로그래밍을 해줬다.
그러나 설계상 문제가 있는 것으로 보인다. service가 memory라는 구현체에도 의존하게끔 설계가 되어, OCP를 위반한 것이다.
'백엔드 잡학사전' 카테고리의 다른 글
[스프링 핵심] 스프링 컨테이너와 스프링 빈 (0) | 2024.08.16 |
---|---|
[스프링 핵심] OOP 관점에서 코드 관찰하기, 스프링으로 전환하기 (0) | 2024.08.14 |
[스프링 핵심] 스프링과 객체 지향 프로그래밍 (0) | 2024.08.12 |
[스프링 입문] 스프링에서의 AOP (0) | 2024.08.11 |
[스프링 입문] 스프링에서의 DB 접근 기술 (0) | 2024.08.11 |