자바 스프링-2주차

이주형·2021년 3월 23일
0

자바 스프링을 활용한 개발 시작 전에 자바만을 이용하여 간단한 회원/주문과 할인 정책을 구현해보자

구현 내용을 아래와 같다.

회원은 일반, VIP 두 등급 
자체 DB구축 가능, 외부 시스템과 연동 (아직 결정 X)

주문과 할인정책 
상품 주문 가능 
등급별로 할인폭 결정 
할인 정책 변경 가능성 있음 

정도가 된다.
여기서 조심해야 할 부분은 바로 이 할인폭과 관련된 부분이다. 할인폭을 그대로 코드에 넣어 정적으로 프로그래밍 해 버리면 추후 문제가 발생하게 될 수 있다.

객체지향적 프로그래밍을 통해 해결
객체지향적 프로그래밍을 통해 인터페이스만 만들고, 나중에 세부적인 할인금액이 나오면 그때 이를 구현하면서 수정하면 문제를 해결할 수 있다.

전체적인 틀 안에서 들어가야 할 기능들을 인터페이스로 구현하고, 현재 우리가 개발하면서 만들어낼 프로토타입에 쓰일 기능들을 구현체로 만들어 끼우면서 프로그래밍을 해나갈 것이다.

구현

우선 처음으로는 enum형을 활용하여 등급을 세팅한다.

다음으로는 멤버 클래스를 구현한다.
멤버 클래스에는 크게 id, 이름, 등급이 존재한다.
생성자를 통해 변수들을 모두 초기화하고, getter와 setter를 만들어 둔다.

다음은 멤버저장소 인터페이스를 구현한다. 멤버저장소는 멤버를 저장하는 save 와 id로 멤버를 차자는 findById로 구성되어 있다.

이후, memoryMemberRepository라는 구현체를 하나 만든다. memorymemberRepository는 MemoryRepository 인터페이스를 상속받는 구현체로, 현재 개발중인 상황에서 우리가 직접 사용하게 될 부분이다. 자체 DB를 쓸지, 외부 시스템을 쓸지가 정해지면 이 부분을 갈아끼우기만 하면 문제없이 동작할 것이다.

다음으로는 memberService를 구현할 것이다.
memberService는 두가지 기능을 수행하면 된다. 바로 회원가입과 회원 조회이다. 이 역시 인터페이스로 구현해준다.

하지만 memberService는 현재 우리 계획상에 구현체가 여러개가 나올 경우의 수가 없다. 그렇기에 뒤에 Impl을 붙여 MemberServiceImpl 이라고 네이밍을 해준다.

이렇게 되면 우리는 뼈대를 구성하는 memoryRepository와 memberService 인터페이스를 통해 멤버저장을 하는 저장소와 회원가입/조회를 할 수 있는 틀을 만들었고, 현재 우리가 끼워넣기로 선택한 memorymemberRepository와 memberServiceImpl을 끼워넣어 프로그램을 굴러가게 만들었다.

직접 실행

이제 애플리케이션을 만들어서 직접 구현한 것을 실행해보자

폴더를 main 폴더가 아닌 test 폴더로 바꿔서 시작한다.

public class MemberServiceTest {
    MemberService memberService = new MemberServiceImpl();

    @Test
    void Join()
    {
        Member member = new Member(1l,"memberA", Grade.VIP);  // 새로운 멤버를 생성해준다 

        memberService.join(member); // 새로운 멤버를 추가해준다
        Member findMember = memberService.findMember(1l);//find member을 통해 새로운 멤버를 찾아 findMember에 넣는다 

        Assertions.assertThat(member).isEqualTo(findMember);
//만약 member저장이 제대로 되었다면 true를 반환할 것이고, 아니라면 에러를 띄울 것이다 


    }
} 

이와 같이 코드를 작성하여 test빌드에서도 문제없이 애플리케이션이 동작한다는 것을 확인해준다.

주문과 할인

다음은 주문과 할인 서비스를 구현할 차례이다.

우선 이에 필요한 역할들은 크게 4가지가 있다

  1. 클라이언트
  2. 주문 서비스 역할
  3. 회원 저장소 역할
  4. 할인 정책 역할

이 4개는 각각 본인이 맡은 역할들을 수행한다.

1. 클라이언트 - 주문서비스에 주문생성 요청 
2. 주문 서비스 - 주문 서비스는 주문자의 등급을 알기 위해 회원 저장소에 주문자에 대한 정보를 요청한다. 이후, 회원 저장소에서 받은 등급을 기반으로 할인 정책 에게 등급에 대한 할인 여부를 확인한 후, 이 결과를 클라이언트에 반환한다.  
3. 회원 저장소 - 회원 저장소는 주문서비스가 요청한 회원의 등급을 저장하고 있다 보여준다. 
4. 할인 정책  - 등급별 할인이 어느정도 되고 있는지를 가지고 있다. 

이를 구현함에 있어서도 객체지향 프로그래밍의 원칙을 지켜나가면서 개발을 진행해 나갈 것이다. 즉, 할인 정책이 바뀌어도, 회원 저장소가 내부저장에서 외부저장으로 바뀐다 하더라도, 주문 서비스나 다른 객체들은 건드릴 필요 없이 그저 블럭을 조립하는(코드상으로는 할당해주는) 부분만 갈아끼운다면 되는 것이다.

0개의 댓글