SPRING 핵심 원리 [ 기본편 ] 23

[스프링 핵심 원리] 섹션 2.8 예제만들기 (주문과 할인 도메인 실행과 테스트)

2.8.1 주문과 할인 도메인 테스트 - main 메소드 사용 앞선 섹션 2.7에서 작성한 주문/할인 도메인이 정상적으로 작동하는지 테스트 해보자. 먼저, main > java > hello.core 에 order 패키지에, OrderApp 클래스를 다음과 같이 작성한다. package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import ..

[스프링 핵심 원리] 섹션 2.7 예제만들기 (주문과 할인 도메인 개발)

2.7.1 할인 도메인 개발 앞선 섹션 2.6의 회원 도메인 설계를 바탕으로 회원 도메인을 개발해보자. 먼저, 할인 정책을 설정하기 위해 main > java > hello.core 에 discount 패키지를 생성하고, DiscountPolicy 인터페이스를 다음과 같이 작성한다. package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /** * @return 할인 대상 금액 */ int discount(Member member, int price); } int discount(Member member, int price) : 파라미터로 멤버 객체와 가격을 넘기는 discount 메소드를..

[스프링 핵심 원리] 섹션 2.6 예제만들기 (주문과 할인 도메인 설계)

2.6.1 주문 / 할인 도메인 설계 앞선 섹션 2.2의 비즈니스 요구사항을 바탕으로 주문 / 할인 도메인을 설계해보자. 주문 / 할 도메인 요구사항은 다음과 같다, 주문 / 할인 도메인 정책 1) 회원은 상품을 주문할 수 있다. 2) 회원 등급에 따라 할인 정책이 다르게 적용된다. 3) 모든 VIP 는 1000원을 할인해주는 고정 금액 할인이 적용된다. (나중에 변경 가능) 4) 할인 정책은 변경 가능하다. 최악의 경우 할인을 적용하지 않을 수 있다. (미확정) 주문 / 할인 도메인 요구사항을 설계해보면 다음과 같다. 클라이언트 : 클라이언트는 주문을 생성할 수 있다. (간단한 예제를 위해 상품 객체가 아닌 상품자체 데이터를 넘기도록 하였다.) 주문 서비스 역할 : 할인을 위해서는 회원 등급이 필요하므..

[스프링 핵심 원리] 섹션 2.5 예제만들기 (회원 도메인 실행과 테스트)

2.5.1 회원 도메인 테스트 - main 메소드 사용 앞선 섹션 2.4에서 작성한 회원 도메인이 정상적으로 작동하는지 테스트 해보자. 먼저, main > java > hello.core 에 order 패키지를 생성하고, MemberApp 클래스를 다음과 같이 작성한다. package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; public class MemberApp { public static void main(String[] args) { MemberServi..

[스프링 핵심 원리] 섹션 2.4 예제만들기 (회원 도메인 개발)

2.4.0 회원 도메인 설계 앞선 섹션 2.3의 회원 도메인 설계를 바탕으로 회원 도메인을 개발해보자. 다음의 인터페이스와 클래스들을 하나씩 만들어보고자 한다. 2.4.1 회원 서비스 개발 먼저, 회원 서비스를 개발하기 전에, 회원 등급을 생성해보자. main > java > hello.core 에 member 패키지를 생성하고, Grade 이름의 enum 파일을 생성한다. package hello.core.member; public enum Grade { BASIC, VIP } public enum Grade : 회원 등급은 BASIC / VIP 2가지로 나뉜다. 다음으로, 회원 정보를 담고 있는 Member 클래스를 만들어보자. member 패키지 아래에 Member 클래스를 생성하고, 다음과 같이 ..

[스프링 핵심 원리] 섹션 2.3 예제만들기 (회원 도메인 설계)

2.3.1 회원 도메인 요구사항 설계 앞선 섹션 2.2의 비즈니스 요구사항을 바탕으로 회원 도메인을 설계해보자. 회원 도메인 요구사항은 다음과 같다, 회원 도메인 요구사항 1) 회원 가입과 조회가 가능해야 한다. 2) 회원 등급은 일반 / VIP 로 나뉜다. 3) 회원 데이터는 자체 DB 를 구축할 수도 있고, 외부 시스템과 연동될 수도 있다. (미확정) 회원 도메인 요구사항을 설계해보면 다음과 같다. 클라이언트 : 클라이언트가 회원 서비스를 호출한다. 회원 서비스 : 회원 서비스는 회원 가입과 조회 기능을 제공한다. 회원 저장소 : 회원 저장소를 별도로 만들어, 회원 데이터에 접근하는 계층을 따로 생성한다. (회원 DB 를 자체 구축할 수도 있고, 외부 시스템과 연동될 수도 있으므로) 앞선 회원 도메인..

[스프링 핵심 원리] 섹션 2.2 예제만들기 (비즈니스 요구사항과 설계)

2.2.1 비즈니스 요구사항 비즈니스 요구사항은 회원/ 주문/ 할인 정책 3가지로 설정하였다. 요구사항을 하나씩 살펴보자. 회원 1) 회원 가입과 조회가 가능해야 한다. 2) 회원 등급은 일반 / VIP 로 나뉜다. 3) 회원 데이터는 자체 DB 를 구축할 수도 있고, 외부 시스템과 연동될 수도 있다. (미확정) 주문 1) 회원은 상품을 주문할 수 있다. 할인 정책 1) 회원 등급에 따라 할인 정책이 다르게 적용된다. 2) 모든 VIP 는 1000원을 할인해주는 고정 금액 할인이 적용된다. (나중에 변경 가능) 3) 할인 정책은 변경 가능하다. 최악의 경우 할인을 적용하지 않을 수 있다. (미확정) 앞선 비즈니스 요구사항에서 회원 데이터, 할인 정책은 미확정이지만, 개발은 진행되어야 하는 상황이다. 따라..

[스프링 핵심 원리] 섹션 2.1 예제만들기 (프로젝트 생성)

2.1.1 프로젝트 생성 (spring initializr 사용) JDK : Java 11 IDE : IntelliJ 사용 앞서 섹션 1에서 공부한 역할과 구현을 이용하여, 스프링 핵심 원리를 이해할 수 있는 간단한 예제를 만들어보고자 한다. 즉, 인터페이스와 이를 구현한 객체를 만들어야 하는데, 스프링을 이용하지 않고, 순수한 자바 코드로만 프로젝트를 만들어 보았다. 하지만 프로젝트 세팅 시에는, 스프링 부트를 이용하면 편리하므로 스프링 부트 스타터 사이트를 이용하여 프로젝트를 생성하였다. https://start.spring.io/ 사이트에 접속한 후, 아래와 같이 프로젝트를 설정한다. (자세한 설명 참조 : https://wlalsu.tistory.com/8) Dependencies 는 아무것도 선..

[스프링 핵심 원리] 섹션 1.5 객체 지향 설계와 스프링

1.5.1 객체지향과 스프링 앞서 섹션 1.4에서, 다형성 만으로는 OCP, DIP 원칙일 지키지 못하는 경우가 생김을 알 수 있었다. 따라서, 위의 경우에서도 다형성을 지키기 위해 스프링은 다음 2가지 기술을 제공한다. DI (Dependency Injection) : 의존관계, 의존성을 주입한다. DI 컨테이너 제공 위의 스프링 기술을 사용하면, 클라이언트 코드 변경 없이도, 기능을 확장할 수 있게된다. 1.5.2 객체 지향 설계 정리 객체 지향의 다형성을 구현하기 위해, 모든 설계에서 역할과 구현을 구분해야 한다. 따라서, 모든 설계에 인터페이스를 부여하는 것이 가장 이상적이다. 하지만, 인터페이스를 사용하면 추상화 비용이 발생한다. 따라서, 확장할 가능성이 없으면 구현 클래스를 사용하다가, 필요할..

[스프링 핵심 원리] 섹션 1.4 객체 지향 설계와 스프링 (SOLID)

1.4.1 좋은 객체 지향 설계의 5가지 원칙(SOLID) 앞서 섹션 1.3에서 좋은 객체 지향의 원칙으로 다형성에 대해 알아보았다. 좋은 객체 지향의 설계의 또 다른 원칙으로는 SOLID 가 있다. SOLID : 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 다음과 같이 정리하였다. 1) SRP : 단일 책임 원칙 (single responsibility principle) 2) OCP : 개방-폐쇄 원칙 (Open/closed principle) 3) LSP : 리스코프 치환 원칙 (Liskov substitution principle) 4) ISP : 인터페이스 분리 원칙 (Interface segregation principle) 5) DIP : 의존관계 역전 원칙 (Dependency in..