* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다.
Package 생성
- New - Package로 hello.core 밑에 member 패키지를 생성한다.
Class 생성
- 이후 New - Class로 필요한 클래스들을 생성한다.
- Grade는 BASIC, VIP 두 가지 값 중 하나를 선택하는 Enum 타입으로 작성했다.
- 마찬가지로 Class와 Interface를 구분하여 생성한다.
- 아래는 member 클래스를 작성하는 과정인데 IntelliJ는 변수 선언 이후 Constructor를 편하게 생성할 수 있다.
- alt + insert 단축키를 사용하면 간편하다.
- 전체(Ctrl + A) 선택 후 OK를 클릭한다.
- 마찬가지로 Getter와 Setter도 생성해준다.
- 참고로 왼쪽의 폴더 구조는 다음과 같이 Flatten 타입과 Compact Middle Packages 중에 고를 수 있다.
- 강사님은 Compact Middle Packages를 선호한다고 하셨는데 개발자 본인의 성향에 따르면 된다고 하셨다.
- 하지만 Compact Middle Packages의 경우 단점이 예를 들어 hello.core의 경우 hello밑에 뭘 만들기가 힘들어서 그런 경우에는 Flatten 모드로 변경해서 만들면 된다.
Interface 생성
- 이후 New - Class에서 Interface를 선택해 생성한다.
- 회원을 저장하는 인터페이스와 id로 회원을 찾는 기능 두 가지 만들 것이다.
- 인터페이스(MemberRepository)를 만들고 구현체(MemoryMemberRepository)를 만들어야 동작한다는 것을 기억하자.
- 인터페이스와 구현체는 원래 다른 패키지로 구분하는게 좋은데 예제가 복잡해지므로 여기서는 그냥 같이 둔다.
- 개발을 하며 빨간 줄이 뜨는 경우에는 대부분 alt + enter에서 옵션을 선택하면 해결된다.
- 아래와 같이 import 문제가 많았고 모두 alt + enter로 해결됐다.
- 또 참고로 ;까지 붙여서 바로 넘어가려면 tab 대신 ctrl + shift + enter를 누르면 된다.
IntelliJ 설정
- 강사님이 단축키를 아주 많이 사용하셔서 편해보였는데 MAC 기준이라 Window 버전이 필요했다.
- 다음과 같이 File - Settings에 들어가 Keymap에서 단축키를 확인하고 없는 것은 추가할 수 있다.
- 또 IntelliJ는 기본 설정이 자동 저장이라 오류가 나기 쉬워보였는데 찾아보니 역시 Settings에서 자동 설정을 끄고 수정된 파일은 * 표시가 뜨도록 체크할 수 있었다.
테스트 코드
ctrl + alt + v
아직까지 스프링 관련 코드가 하나도 없어서 main 메소드로 확인하는 건 좋은 방법이 아니므로 이제 Junit이라는 테스트 프레임워크를 사용한다.
폴더 구조를 주의해야 하는 게 main이 아닌 test 폴더에 작성한다.
test 폴더는 말 그대로 테스트를 위한 곳이므로 나중에 빌드할 때 운영 환경에 포함되지 않는다.
주의 : 첫 번째 거가 아니라 두 번째 것 선택해야 함, 더 편리한 api가 많음
이렇게 모두 초록불이 들어오며 테스트 성공을 알 수 있음
2로 바꿔보면 오류가 뜨며 테스트에 fail한 것을 알 수 있다. 눈으로 직접 비교하는 게 아니라 틀린 부분을 바로 파악할 수 있음. 현대적인 코딩 방법에서 테스트 코드는 선택이 아니라 필수임.
회원 도메인 설계의 문제점
- 이 코드의 설계상 문제점은 무엇일까?
- 만약 다른 저장소로 변경할 때 OCP 원칙을 잘 준수할까?
- DIP는 잘 지키고 있을까?
- 답은 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있다.
- 주문까지 만들고 나서 문제점과 해결 방안을 알아보자.
- 이 코드를 보면 MemberServiceImple은 MemberRepository와 MemoryMemberRepository를 둘 다 의존하는데 MemoryMemberRepository 구현체를 선택한 것은 상황에 따라 변할 수 있으므로 좋지 않은 설계이다.
- 간단하게 추상화에도 의존하고 구체화에도 의존하는 상황이다.
'공부 > Spring' 카테고리의 다른 글
[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (주문과 할인 도메인 개발과 테스트 코드 작성) (0) | 2022.10.01 |
---|---|
[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (주문과 할인 도메인 설계) (0) | 2022.09.27 |
[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (비즈니스 요구사항과 프로젝트 설계) (1) | 2022.09.21 |
[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (프로젝트 생성) (0) | 2022.09.19 |
[섹션 1] 객체 지향 설계와 스프링 (0) | 2022.09.13 |