회원가입에 대한 데이터를 처리하고 회원정보를 조회하는 간단한 기능을 구현하려고 한다.

 

각 자바소스 아래에 소스에 대한 간단한 설명을 참고.

 

강의에 있는 소스는 저작권때문에 그대로 올릴 수 없어 변형하여 올렸으므로, Git 소스와 다를 수 있습니다.
기본적인 메소드 이름과 결과값은 같습니다.

 

 

 

Member.java

package hello.servlet.domain.member;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@ToString
public class Member {

    private Long id;
    private String username;
    private int age;
    private String address;

    public Member(String username, int age, String address) {
        this.username = username;
        this.age = age;
        this.address = address;
    }

}

1. Member 클래스:

  • id, username, age, address 정보를 담고 있는 클래스.
  • Lombok 어노테이션을 활용하여 기본 생성자, 매개변수가 있는 생성자, getter/setter, equals, hashCode, toString 등의 메소드를 자동 생성.
  • id는 long, username과 address는 String, age는 int 형식으로 정의.
@NoArgsConstructor : 매개변수가 없는 기본 생성자를 자동으로 생성한다.
@AllArgsConstructor : 모든 필드를 매개변수로 받는 생성자를 자동으로 생성한다.
@EqualsAndHashCode : equals()와 hashCode() 메소드를 자동으로 생성한다.
equals() 메소드는 객체의 내용이 같으면 true를 반환하고, hashCode() 메소드는 객체의 고유한 값을 반환한다.
이 때, 객체의 내용이 같다는 기준은 @EqualsAndHashCode 어노테이션이 적용된 모든 필드가 같을 때이다.

 

MemberRepository.java

package hello.servlet.domain.member;

import java.util.*;

public class MemberRepository {

    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

    public Member findById(Long id) {
        return store.get(id);
    }

    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

    public void clearStore(){
        store.clear();
    }
}

2. MemberRepository 클래스:

  • Member 객체를 저장하고, 조회할 수 있는 저장소를 나타내는 클래스.
  • store라는 Map<String, Member>를 멤버 변수로 가지며, member의 id 값을 key로 하여 Member 객체를 value로 저장.
  • MemberRepository 클래스 안에는 0L 값인 public static long sequence를 선언. 이는 Member 객체의 id 값을 자동 증가시키기 위해 활용.
  • save(), findById(), findAll()과 같은 여러 메소드를 제공.

 


 

MemberRepositoryTest.java

package hello.servlet.domain.member;

import org.junit.jupiter.api.*;

import java.util.*;

import static org.assertj.core.api.Assertions.*;

public class MemberRepositoryTest {
    MemberRepository memberRepository = new MemberRepository();

    @AfterEach
    void afterEach(){
        memberRepository.clearStore();
    }

    @Test
    void save(){
        //given
        Member member = new Member("hello",20, "New York");

        //when
        Member saveMember = memberRepository.save(member);

        //then
        Member findMember = memberRepository.findById(saveMember.getId());
        assertThat(findMember).isEqualTo(saveMember);
    }

    @Test
    void findAll(){
        //given
        Member member1 = new Member("member1", 20, "New York");
        Member member2 = new Member("member1", 30, "Los Angeles");

        memberRepository.save(member1);
        memberRepository.save(member2);
        //when
        List<Member> result = memberRepository.findAll();

        //then
        assertThat(result.size()).isEqualTo(2);
        assertThat(result).contains(member1, member2);

    }
}

3. MemberRepositoryTest 클래스:

  • MemberRepository 클래스의 메소드를 테스트하는 클래스.
  • JUnit 프레임워크를 활용하여, MemberRepository 클래스의 각 메소드가 의도한대로 동작하는지 검증.

 

 

 

 

Git : https://github.com/ShinHenry/Basic-Servlet-Project.git

 

GitHub - ShinHenry/Basic-Servlet-Project: SpringBoot 기반 Servlet 프로젝트

SpringBoot 기반 Servlet 프로젝트. Contribute to ShinHenry/Basic-Servlet-Project development by creating an account on GitHub.

github.com

 

 

출처 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

+ Recent posts