Spring(회원서비스 개발)

손원진·2023년 1월 31일
0

[SPRING]

목록 보기
2/15
  1. 회원서비스 개발코드 (spring)

서비스는 비즈니스 로직에 가깝게 용어를 선택한다.

//service package 생성 

package hello.hellospring.service;

public class MemberService {
	
    private final MemberRepository memberRepository = new MemoryMemberRepository
    
    /**
    * 회원가입 
    **/
    
    public Long join(Member member){
   	//같은이름이 있는 중복회원이 있으면 안된다 
       /*memberRepository.findByName(member.getName());
			
        	.ifPresent(m -> {
		
			throw new IllegalStateException("이미 존재하는 회원입니다")
        }

    	
    }
    */ 
    추출한 메소드를 호출 
    	validateDuplicateMember(member);
        //같은 이름이 있는지 중복검사 
       //없으면
       memberRepository,save(member);
       
       return member.getrId();
    //ctrl + alt + m으로 extract method로 메소드를 추출할 수 있다. 
}


추출한 결과 

	private void validateDuplicateMember(Member member){
    	 memberRepository.findByName(member.getName());
			
        	.ifPresent(m -> {
		
			throw new IllegalStateException("이미 존재하는 회원입니다");
        }

    	
    }
   //위 메소드를 다음과 같이 추출 
	
    
    public List<Member> findMembers(){
    	
        return memberRepository.findAll();
    
    //전체 회원을 반환
    }
    
    
    public Optional<Member> findOne(Long memberId){
    
    	return memberRepository.findById(memberId);
        
    }
    

회원 코드 작성한 거 테스트 해보기

테스트 진행

해당 프로세스로 들어가서 ctrl + shift + T를 누르면 create new Test 창이 나옵니다. 창을 누르고 들어가서 직접 테스트하면 됩니다.


import org.junit.jupiter.api.Test; 

class MemberServiceTest { 
	
    MemberService memberService = new MemberService();
    
   	MemoryMemberRepository memberRepository = new MemoryMemberRepository();
    
    @AfterEach
    public void afterEach(){
    	memberRepository,clearStore();
        
        //메모리에 데이터가 계속 쌓이니 삭제해주기 위한 것 
    }
    
	@Test 
    void 회원가입(){
    
    	//given 데이터를 기반으로 하는 것  
        Member member = new Member9);
        Member.setName("hello");
        
        //when 이런 것을 검증하는 구나 
        Long saveId = memberService.join(member);
        
        //then 검증부구나 라는 것을 알 수 있어서 코드를 3개로 분할해서 사용하는 것이좋음 
        Member findMember = memberService.findOne(saveId).get();
        Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
    
    }
    
    
    
    @Test
    public void 중복_회원_예외(){
    	//given 
        Member member1 = new Member();
        member1.setName("spring");
        
        Member member2 = new Member();
        member2.setName("spring");
        
        //when
        memberService.join(member1);
        assertThrows(IllegalStateException.class, () ->memberService.join(member2));
        /*다른 수가나오면 에러터지며 종료 
        try { 
        	memberService.join(member2);
            fail();
            
        	}catch ( IllegalStateException e) {
            	assertThat(e.getMessage()).idEqualTo("이미 존재하는 회원입니다.");
            
            }
        	//then
    	*/
    }
    
    //나중에 알아야하는 정보
    
    //멤버 repository를 외부에서 넣어주기위함 ( new를 통해서가 아니라) 클래스 레벨에서 넣으려면? 
    
    
    public MemberService(MemberRepository memberRepository){
    
    	this.memberRepository = memberRepository;
        
    } 
profile
매일 한 걸음

0개의 댓글