회원가입에 대한 데이터를 처리하고 회원정보를 조회하는 간단한 기능을 구현하려고 한다.
각 자바소스 아래에 소스에 대한 간단한 설명을 참고.
강의에 있는 소스는 저작권때문에 그대로 올릴 수 없어 변형하여 올렸으므로, 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편 - 백엔드 웹 개발 핵심 기술
'Backend > Spring MVC' 카테고리의 다른 글
[Spring MVC] MVC 패턴 (0) | 2023.03.08 |
---|---|
[Spring MVC] JSP (0) | 2023.03.08 |
[Spring MVC] HTTP Response - API JSON (Servlet 기반) (0) | 2023.03.06 |
[Spring MVC] HttpServletResponse(Servlet 기반) (0) | 2023.03.02 |
[Spring MVC] API - HTTP message body(Servlet 기반) (0) | 2023.03.01 |