Spring-2021.12.02

Jonguk Kim·2021년 12월 2일
0

Spring 강의

목록 보기
3/7

1. 프로젝트 생성

  1. 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
    https://start.spring.io

  2. 프로젝트 선택
    Project: Gradle Project
    Spring Boot: 2.6.1 (최신버전) (SNAPSHOT은 정식버전 아니므로 선택하면 안됨)
    Language: Java
    Packaging: Jar
    Java: 11 (기존에 8이 설치되어 있어서 8로 함)
    Project Metadata
    groupId: hello
    artifactId: core
    Dependencies: 선택하지 않음

  3. IntelliJ Gradle 대신에 자바 직접 실행

  • 최근 IntelliJ 버전은 Gradle을 통해서 실행 하는 것이 기본 설정이다. 이렇게 하면 실행속도가 느리다.
  • 다음과 같이 변경하면 자바로 바로 실행해서 실행속도가 더 빠르다.
  • Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle
    • Build and run using: Gradle IntelliJ IDEA
    • Run tests using: Gradle IntelliJ IDEA

2. 비즈니스 요구사항과 설계

  • 요구사항

3. 회원 도메인 설계

  • 회원 도메인 협력 관계 (기획자들도 보는 그림)
  • 회원 클래스 다이어그램 (개발자가 구체화, 서버 뜨기 전 클래스만 분석, 정적)
  • 회원 객체 다이어그램 (서버가 뜰때 분석, 실제 서비스, 동적)

4. 회원 도메인 개발

  • 회원 등급
// 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);		// 회원조회 구현
    }
}

5. 회원 도메인 테스트

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());	// 결과 비교

    }
}

=> 의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음

profile
Just Do It

0개의 댓글