
회원 가입 시스템 설계

프로젝트 생성
project_name : oop_sample

Grade.java
더보기
package member;
public enum Grade {
BASIC, VIP
}
Member.java
더보기
package member;
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Member [id=" + id + ", name=" + name + ", grade=" + grade + "]";
}
}
MemberRepository.java
더보기
package member.repository;
import member.Member;
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
MemberServiceImpl.java
더보기
package member.service;
import member.Member;
import member.repository.MemberRepository;
public class MemberServiceImpl implements MemberService {
private MemberRepository repository;
public MemberServiceImpl(MemberRepository repository) {
this.repository = repository;
}
@Override
public void signUp(Member member) {
repository.save(member);
// TODO Auto-generated method stub
}
@Override
public Member findByIdMember(Long memberId) {
// TODO Auto-generated method stub
return repository.findById(memberId);
}
}
DBMemberRepositoryImpl.java
더보기
package member.repository;
import member.Member;
public class DBMemberRepositoryImpl implements MemberRepository {
@Override
public void save(Member member) {
// TODO Auto-generated method stub
}
@Override
public Member findById(Long memberId) {
// TODO Auto-generated method stub
return null;
}
}
MemberService.java
더보기
package member.service;
import member.Member;
public interface MemberService {
void signUp(Member member);
Member findByIdMember(Long memberId);
}
MemoryMemberRepositoryImpl.java
더보기
package member.repository;
import java.util.HashMap;
import java.util.Map;
import member.Grade;
import member.Member;
public class MemoryMemberRepositoryImpl implements MemberRepository {
private static MemoryMemberRepositoryImpl instance;
private Map<Long, Member>memberStore = new HashMap<>();
public MemoryMemberRepositoryImpl() {
// TODO Auto-generated constructor stub
initData();
} // 생성자
public static MemoryMemberRepositoryImpl getInstance() {
if(instance == null) {
instance = new MemoryMemberRepositoryImpl();
}
return instance;
}
private void initData() {
memberStore.put(1L, new Member(1L, "홍길동", Grade.VIP));
memberStore.put(2L, new Member(2L, "이몽룡", Grade.BASIC));
memberStore.put(3L, new Member(3L, "성춘향", Grade.VIP));
}
@Override
public void save(Member member) {
// TODO Auto-generated method stub
memberStore.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
// TODO Auto-generated method stub
return memberStore.get(memberId);
}
};
MainTest1.java
더보기
package member;
import member.repository.MemberRepository;
import member.repository.MemoryMemberRepositoryImpl;
import member.service.MemberService;
import member.service.MemberServiceImpl;
public class MainTest1 {
public static void main(String[] args) {
// MemberRepository memberRepsitoryDB = new DBMemberRepositoryImpl();
MemberRepository memberRepsitory = MemoryMemberRepositoryImpl.getInstance();
MemberService memberService = new MemberServiceImpl(memberRepsitory);
// 클라이언트
Member member = new Member(100L, "티모", Grade.VIP);
// 신규 회원 가입 기능 요청
memberService.signUp(member);
// 정상적으로 메모리에 들어 갔는지 확인
System.out.println(memberService.findByIdMember(100L));
System.out.println(memberService.findByIdMember(1L));
System.out.println(memberService.findByIdMember(2L));
}
}



FixDiscountPolicyImpl.java
더보기
package order;
import member.Grade;
import member.Member;
public class FixDiscountPolicyImpl implements DiscountPolicy {
private int discountFixAmount = 1500;
@Override
public int discount(Member member, int price) {
// VIP 회원만 할인 금액 적용 된다.
if (member.getGrade() == Grade.VIP) {
return discountFixAmount;
}
return 0;
}
}
PercentDiscountPolicyImpl.java
더보기
package order;
import member.Grade;
import member.Member;
public class PercentDiscountPolicyImpl implements DiscountPolicy {
private double discountPercent = 10.0; // 10% 할인
@Override
public int discount(Member member, int price) {
if (member.getGrade() == Grade.VIP) {
return (int)(price * (discountPercent / 100));
}
return 0;
}
}
Order.java
더보기
package order;
public class Order {
private Long memberId;
private String itemName;
private int imtePrice;
private int dicountPrice;
public Order(Long memberId, String itemName, int imtePrice, int dicountPrice) {
this.memberId = memberId;
this.itemName = itemName;
this.imtePrice = imtePrice;
this.dicountPrice = dicountPrice;
}
// 상품 금액에 할인된 가격 금액 출력 하는 기능
public int calculateDiscount() {
return imtePrice - dicountPrice;
}
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 getImtePrice() {
return imtePrice;
}
public void setImtePrice(int imtePrice) {
this.imtePrice = imtePrice;
}
public int getDicountPrice() {
return dicountPrice;
}
public void setDicountPrice(int dicountPrice) {
this.dicountPrice = dicountPrice;
}
@Override
public String toString() {
return "Order [memberId=" + memberId + ", itemName=" + itemName + ", imtePrice=" + imtePrice + ", dicountPrice="
+ dicountPrice + "]";
}
}
OrderService.java
더보기
package order;
public interface OrderService {
Order createOrder(Long memberId, String itemName, int itemPrice);
}
OrderServiceImpl.java
더보기
package order;
import member.Member;
import member.repository.MemberRepository;
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepsitory;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepsitory, DiscountPolicy discountPolicy) {
this.memberRepsitory = memberRepsitory;
this.discountPolicy = discountPolicy;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepsitory.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
DiscountPloicy.java
더보기
package order;
import member.Member;
public interface DiscountPolicy {
int discount(Member member, int price);
}
OrderServiceTest.java
더보기
package order;
import member.Grade;
import member.Member;
import member.repository.MemberRepository;
import member.repository.MemoryMemberRepositoryImpl;
public class OrderServiceTest {
public static void main(String[] args) {
MemberRepository memberRepsitory = MemoryMemberRepositoryImpl.getInstance();
Member member = new Member(1L, "홍길동", Grade.VIP);
// 고정 할인 정책 테스트
DiscountPolicy fixDiscountPolicy = new FixDiscountPolicyImpl();
DiscountPolicy percentDiscountPolicy = new PercentDiscountPolicyImpl();
OrderService orderService1 = new OrderServiceImpl(memberRepsitory, percentDiscountPolicy);
Order order1 = orderService1.createOrder(1L, "맥북", 10000);
System.out.println(order1);
System.out.println(order1.calculateDiscount());
}
}

AppConfig.java
더보기
package config;
import member.repository.MemberRepository;
import member.repository.MemoryMemberRepositoryImpl;
import member.service.MemberService;
import member.service.MemberServiceImpl;
import order.DiscountPolicy;
import order.FixDiscountPolicyImpl;
import order.OrderService;
import order.OrderServiceImpl;
public class AppConfig {
public MemberRepository geMemberRepsitory() {
return MemoryMemberRepositoryImpl.getInstance();
}
public MemberService getMemberService() {
return new MemberServiceImpl(geMemberRepsitory());
}
public DiscountPolicy getDiscountPolicy() {
// 할인 정책이 --> 고정할인
// 변경 --->정율 할인 바꾸면 된다.
return new FixDiscountPolicyImpl(); // 이 부분만 변경하면 됩니다.
//return new PercentDiscountPolicyImpl();
}
public OrderService getOrderService() {
return new OrderServiceImpl(geMemberRepsitory(), getDiscountPolicy());
}
}
MainApp.java
더보기
package config;
import member.Grade;
import member.Member;
import member.service.MemberService;
import order.Order;
import order.OrderService;
public class MainApp {
public static void main(String[] args) {
AppConfig appConfig = new AppConfig();
// 클라이언트 입장에서 코딩
// 회원 가입 기능이 필요 함.
MemberService memberService = appConfig.getMemberService();
Member member = new Member(200L, "도시락", Grade.VIP);
memberService.signUp(member); // 회원 가입
// 사용자 주문 요청
OrderService orderService1 = appConfig.getOrderService();
Order order1 = orderService1.createOrder(member.getId(), "아이폰16", 3_000);
System.out.println(order1);
System.out.println(order1.getDicountPrice());
}
}

'Java' 카테고리의 다른 글
| Spring boot로 Cookie 로그인 시연해보기 (1) | 2026.01.27 |
|---|---|
| 2024.10.01 Stream API - 부록 3 (0) | 2024.10.01 |
| 2024.09.13 Java 유용한 클래스 - 3 람다식(Lambda expression) (1) | 2024.09.13 |
| 2024.08.01 JSP 프로그래밍 기본 JSP 파일 업로드 (0) | 2024.08.01 |
| 커스텀 태그(JSTL) 라이브러리 사용 jakarta.servlet.jsp.jstl 다운로드 (0) | 2024.07.12 |