스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
https://start.spring.io
프로젝트 선택
Project: Gradle Project
Spring Boot: 2.6.1 (최신버전) (SNAPSHOT은 정식버전 아니므로 선택하면 안됨)
Language: Java
Packaging: Jar
Java: 11 (기존에 8이 설치되어 있어서 8로 함)
Project Metadata
groupId: hello
artifactId: core
Dependencies: 선택하지 않음
IntelliJ Gradle 대신에 자바 직접 실행
// enum은 서로 연관된 상수들의 집합을 의미
// => 회원등급은 enum에서 설정한 값만 등록 가능
public enum Grade {
BASIC, // 일반
VIP // VIP
}
public class Member {
private Long id; // ID
private String name; // 회원 아이디
private Grade grade; // 회원 등급
// 생성자
// getter, setter
}
public interface MemberRepository {
void save(Member member); // 회원가입
Member findById(Long memberId); // 회원조회
}
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);
}
}
public interface MemberService {
void join(Member member); // 회원가입
Member findMember(Long memberId); // 회원조회
}
public class MemberServiceImpl implements MemberService {
// 회원 저장소: 메모리 회원 저장소 설정
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); // 회원조회 구현
}
}
public class MemberServiceTest {
// 회원 서비스: 회원 서비스 설정
MemberService memberService = new MemberServiceImpl();
@Test
void join() {
//given
Member member = new Member(1L, "memberA", Grade.VIP);
//when
memberService.join(member); // 회원가입 테스트
Member findMember = memberService.findMember(1L); // 회원조회 테스트
//then
assertThat(findMember.getId()).isEqualTo(member.getId()); // 결과 비교
}
}
=> 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음