지금까지 우리가 배운대로, 역할과 구현을 나누어서(인터페이스와 구현 객체를 나누어서), 개발을 해볼 건데, (스프링의 도움 없이)순수한 JAVA로만 개발해보겠다 😉
📌 사전 준비물
이전에 개발환경 설정, 프로젝트 생성하는 포스팅을 올린 적이 있기 때문에, 최소한만 작성하고 넘어가겠다 😉
앗❗️ 나는 전에 자바 ver8을 설치했어서 ver11으로 다시 바꿔주었다 !
✔️ 스프링 부트 스타터 사이트에서 프로젝트 생성
프로젝트 선택
-> Project: Gradle Project
-> Spring Boot: 2.5.3
-> Language: Java
-> Packaging: Jar
-> Java: 11
Project Metadata
-> groupId: hello
-> artifactId: core
-> Dependencies: 선택하지 않는다(스프링 코어 쪽 라이브러리만 가지고 간단히 구성해줌)
⬆️ preference -> 검색창에(gradle)입력 -> 빌드 관련 부분 위와 같이 수정
-> Gradle을 통해 실행시키면 조금 느리기 때문에 IntelliJ 로 바꿔줌!
프로젝트 환경 설정 끄읏 👏🏻
회원, 주문, 할인정책 총 3가지의 요구사항이 있다!
요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다 😂
그렇다고 이런 정책이 결정될 때 까지 개발을 무기한 기다릴 수도 없다!
우리는 앞에서 배운 객체 지향 설계 방법을 사용하면 된다 우하하하 😆
인터페이스를 만들고 구현체를 언제든지 갈아 끼울 수 있도록 설계하면 된다!
📌 참고 : 프로젝트 환경설정을 편리하게 하려고 스프링 부트를 사용한 것! 지금은 스프링 없는 순수한 자바로만 개발을 진행할 것이고, 스프링 관련 내용은 나중에 등장한다 😉
MemberService
라는 역할을 인터페이스로 만들고, 그것에 대한 구현체로 MemberServiceImpl
를 만듦MemberRepository
회원 저장소의 역할을 인터페이스로 만들고, 그것에 대한 구현클래스로 MemoryMemberRepository
, DbMemberRepository
를 만듦✔️ hello.core/member/Grade
생성 (클래스 생성 시 Enum
으로 생성)
package hello.core.member;
public enum Grade {
BASIC,
VIP
}
✔️ hello.core/member/Member.java
클래스 생성
package hello.core.member;
public class Member {
private Long id;
private String name;
private Grade grade;
// 생성자 만들기
// 단축키 Command+N
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;
}
}
📌 단축키 확인 : preference->Keymap
✔️ hello.core/member/MemberRepository.java
❗️인터페이스❗️ 생성
package hello.core.member;
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
💡 원래는 인터페이스와 구현체를 다른 패키지에 두는 것이 좋은 방법이지만, 우리는 배우는 단계이므로 일단 같은 패키지에 두겠음!
✔️ hello.core/member/MemoryMemberRepository.java
클래스 생성
package hello.core.member;
import java.util.HashMap;
import java.util.Map;
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
✔️ hello.core/member/MemberService.java
❗️인터페이스❗️ 생성
package hello.core.member;
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
✔️ hello.core/member/MemberServiceImpl.java
클래스 생성
package hello.core.member;
public class MemberServiceImpl implements MemberService{
// 가입을 하고 회원을 찾으려면 앞서 만든 MemberRepository 인터페이스가 필요함
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
다음 시간에 이어서 계속.....🤚🏻