[Java] 회원 관리 시스템 구현하기 - 2탄

2025. 2. 5. 10:34·☁️ 구름 x 카카오 Deep Dive 풀스택/Java
728x90

 

오늘은 지난번에 간단하게 구현했던 회원 관리 시스템에서 할인 정책을 추가할 거예요.

 

앞서 구현한 1탄 먼저 보고 와주세요!

 

[Java] 회원 관리 시스템 구현하기 - 1탄

오늘은 순수 자바 코드로 간단한 회원 관리 시스템을 구현해볼 거예요!저는 인텔리제이를 사용하고 있습니다. :) 📌 프로젝트 구조   📌 Grade.java (회원 등급) 회원 등급은 일반 등급과 VIP 등

zero-talk.tistory.com

 


 

📌 프로젝트 구조

 

 

 

📌 DiscountPolicy.java (할인 정책 인터페이스)

package hello.core.discount;

import hello.core.member.Member;

public interface DiscountPolicy {

    // @return 할인 대상 금액 ex. 1000
    int discount(Member member, int price);
}

 

 

 

📌 FixDiscountPolicy.java (할인 정책 구현체)

 

if문을 사용해 회원의 등급이 VIP일 경우 1000원을 할인해주도록 구현합니다.

package hello.core.discount;

import hello.core.member.Grade;
import hello.core.member.Member;

public class FixDiscountPolicy implements DiscountPolicy {

    private int discountFixAmount = 1000;

    @Override
    public int discount(Member member, int price) {
        if (member.getGrade() == Grade.VIP) {
            return discountFixAmount;
        } else {
            return 0;
        }
    }
}

 

 

 

 

📌 Order.java (주문 객체)

 

물품 가격에서 할인 가격을 빼는 간단한 비즈니스 로직을 추가합니다. (할인)

package hello.core.order;

public class Order {

    private Long memberId;
    private String itemName;
    private int itemPrice;
    private int discountPrice;

    public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
        this.memberId = memberId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.discountPrice = discountPrice;
    }

    // 비즈니스 로직 (계산)
    public int calculatePrice() {
        return itemPrice - discountPrice;
    }

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public int getItemPrice() {
        return itemPrice;
    }

    public void setItemPrice(int itemPrice) {
        this.itemPrice = itemPrice;
    }

    public int getDiscountPrice() {
        return discountPrice;
    }

    public void setDiscountPrice(int discountPrice) {
        this.discountPrice = discountPrice;
    }

    @Override
    public String toString() {
        return "Order{" +
                "memberId=" + memberId +
                ", itemName='" + itemName + '\'' +
                ", itemPrice=" + itemPrice +
                ", discountPrice=" + discountPrice +
                '}';
    }
}

 

 

 

📌 OrderService.java (주문 인터페이스)

 

Order 객체를 반환합니다. (memberId, itemName, itemPrice)

package hello.core.order;

public interface OrderService {

    Order createOrder(Long memberId, String itemName, int itemPrice);
}

 

 

 

📌 OrderServiceImpl.java (주문 구현체)

 

memberId로 회원을 찾고 해당 회원이 VIP이면 할인을 해주도록 작성합니다.

할인이 되면 새로운 Order 객체가 생성될 테니 new Order를 반환합니다.

package hello.core.order;

import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;

public class OrderServiceImpl implements OrderService {

    private final MemberRepository memberRepository = new MemoryMemberRepository();
    private final DiscountPolicy discountPolicy = new FixDiscountPolicy();

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);
        
        return new Order(memberId, itemName, itemPrice, discountPrice);
    }
}

 

 

 

📌 OrderApp.java

 

지금까지 작성했던 코드를 실행할 클래스입니다.

package hello.core;

import hello.core.order.Order;
import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;

public class OrderApp {
    public static void main(String[] args) {

        MemberService memberService = new MemberServiceImpl();
        OrderService orderService = new OrderServiceImpl();

        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);

        System.out.println("order = " + order);
        System.out.println("order.calculatePrice = " + order.calculatePrice());
    }
}

 

 

 

회원과 물품, 물품 가격, 등급에 따른 할인 가격이 출력되는 것을 확인할 수 있습니다.

 


 

위와 같은 방식으로 java로 테스트를 하는 것보다 (main에서 실행)

api를 사용해 테스트를 하는 게 더 유용하므로 해당 방법으로도 테스트를 해보겠습니다.

 

 

기존에 코드를 작성하던 main 디렉토리 말고 test 디렉토리에서 테스트를 할 수 있습니다.

저는 OrderServiceTest 라는 이름으로 테스트용 java 클래스를 생성했어요.

 

 

 

📌 OrderServiceTest.java (JUnit 테스트)

 

이와 같은 방법으로 단위 테스트를 하는 게 중요합니다.

package hello.core.order;

import hello.core.member.Grade;
import hello.core.member.Member;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

public class OrderServiceTest {

    MemberService memberService = new MemberServiceImpl();
    OrderService orderService = new OrderServiceImpl();

    @Test
    void createOrder() {
        Long memberId = 1L;
        Member member = new Member(memberId, "memberA", Grade.VIP);
        memberService.join(member);

        Order order = orderService.createOrder(memberId, "itemA", 10000);
        Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
    }
}

 

 

 

해당 테스트 파일을 실행하면 실행이 잘 되는 것을 확인할 수 있습니다.

 

 

 

 

 

728x90
저작자표시 비영리 동일조건 (새창열림)

'☁️ 구름 x 카카오 Deep Dive 풀스택 > Java' 카테고리의 다른 글

[Java] 회원 관리 시스템 구현하기 - 1탄  (2) 2025.02.04
[Java] 문자열 처리 과정에 있어서 메모리 사용랑과 처리 속도 효율적으로 하기  (0) 2025.01.14
'☁️ 구름 x 카카오 Deep Dive 풀스택/Java' 카테고리의 다른 글
  • [Java] 회원 관리 시스템 구현하기 - 1탄
  • [Java] 문자열 처리 과정에 있어서 메모리 사용랑과 처리 속도 효율적으로 하기
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이클립스
    java
    JSP
    spring
    HTML
    구현체
    programmers
    2단계
    자바스크립트
    0단계
    회원 관리 시스템
    Lv0
    junit 테스트
    springboot
    Lv2
    자바
    코테
    eclipse
    프로젝트 구조
    코딩테스트
    티스토리챌린지
    톰캣
    POST
    3단계
    javascript
    DFS
    LV3
    CSS
    오블완
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
[Java] 회원 관리 시스템 구현하기 - 2탄
상단으로

티스토리툴바