공부/Spring

[섹션 2] 스프링 핵심 원리 이해1 - 예제 만들기 (주문과 할인 도메인 개발과 테스트 코드 작성)

남쪽마을밤송이 2022. 10. 1. 21:54

* Inflearn에서 "스프링 핵심 원리 - 기본편" by 김영한 강의를 수강하며 작성한 글입니다.

 


 주문과 할인 도메인 개발 

  • 패키지 생성, 인터페이스 생성

 

  • 여기서 좋은 단축키 F2, 아무곳에서나 누르면 오류가 난 Member로 바로 이동한다.
    • 이동해서 alt + enter로 Member를 import 해주면 해결된다.
    • 그런데 여기서 문제가 나는 hello.core 아래에 작성한 member 패키지를 IntelliJ가 alt + enter로 찾지 못했다. 그래서 수동으로 입력해줬는데 설정을 해줘야 하는게 있는지... 찾아봐야겠다.

 

  • 또 IntelliJ의 경우 주석을 입력하기 위해 /**를 치고 enter하면 자동으로 params와 return 주석이 생성된다.

 

  • 정액 할인 정책을 위한 클래스를 생성한다.

 

  • 주문 코드를 작성할 order 패키지를 생성한다.

 

  • 기본 class에 필요한 생성자와 getter, setter를 모두 만들어 준 뒤 필요한 함수를 추가로 정의한다.
    • 그리고 출력을 보기 편하게 하기 위해서 toString()을 사용하는데 객체를 출력하면 toString()의 결과가 주루룩 출력된다.
    • 예를 들어 다른 곳에서 System.out.println("order = " + order);과 같이 order 객체 자체를 출력하는 방식으로 사용하면 order 클래스 안에 있는 toString()을 호출하는 것과 같다.

 

  • 이제 도메인 설계에서 다음 부분에 해당하는 주문 인터페이스와 구현체를 작성한다.

 

  • 아래 코드는 단일체계 원칙을 잘 지킨, 설계를 잘 한 코드라고 할 수 있다.
    • 이렇게 코드를 짜두면 현재 할인 정책이 확정되지 않았어도 코드를 구현할 수 있고, 나중에 할인 정책이 변경되면 그 부분만 수정하면 된다.

 

 주문과 할인 도메인 테스트 코드 

  • 이제 메인 메소드를 만들고 테스트 코드를 작성할 차례이다.
    • 바로 테스트를 해도 되지만 아직 테스트에 익숙하지 않은 수강생들을 위한 절차라고 한다.

 

  • 저번 시간에도 공부했지만 개발할 때 편한 단축어에 익숙해지자.
    • psvm : public static void main(String[] args) { ... }
    • soutv : System.out.println(...)

 

  • OrderApp의 main 메소드를 실행하면 23번째 줄에 의해서 order 객체가 위에서 설정해 둔 toString() 형태로 출력이 된다.
    • calculatePrice() 메소드까지 호출하면 할인된 금액인 9000원이 잘 출력되는 것을 확인할 수 있다.

 

  • 그러나 위와 같이 메인 메소드를 작성해 테스트하는 방식은 비효율적이라는 것을 알고 있다. 이번에는 테스트 코드를 작성해보자.

 

  • 작성 시 주의사항
    • 여기서는 long 타입을 사용해도 상관 없지만 long 타입은 null값이 할당되지 않아서 나중에 DB 관련 작업을 하려면 Long 타입이 더 편하다고 한다.
    • Assertions 라이브러리는 꼭 두 번째로 뜨는 org.assertj.core.api를 선택해야 내장 함수가 많아 편하다.

 

  • 모두 작성한 뒤 실행시켜보면 성공!

 

  • member 패키지와 order 패키지 모두 테스트 하기 위해서는 hello.core 패키지에서 실행시켜주면 된다.
    • 나중에 코드가 많아지면 단위 테스트를 구분하는 게 굉장히 중요하다.

 

  • 다음 시간부터는 우리가 작성한 코드에서 정말 다른 부분은 수정하지 않고 할인 정책만 바꾸는 게 가능한지 개발해보자.