100세까지 코딩
[스프링 입문] 회원 도메인과 리포지토리 만들기 본문
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세
www.inflearn.com
출처 : 김영한님의 스프링 입문
회원 도메인
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
회원 레포지토리 인터페이스
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
인터페이스 사용 이유
1. 메소드의 구현 및 이름을 강제하여 협업시 표준화를 유도할 수 있다.
2. 교체 용이 : 클래스를 개발해서 이름만 교체하면 된다. 다른 로직 변경 X
3. 다중 상속
Optional
1. Optinoal<T> 클래스를 사용하여 NPE(NullPointerException)을 방지할 수 있다.
2. null이 올 수 있는 값을 Wrapper 클래스로 감싸서 NPE가 발생하지 않는다.
3. 각종 메소드를 제공해준다.
3-1. Optinoal.ofNullable() - 값이 Null일수도 아닐수도 있다.
Optional.empty() - 값이 Null이다.
Optional.of() - 값이 Null이 아니다. (null을 넣으면 NPE 발생)
회원 레포지토리
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long,Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore(){
store.clear();
}
}
static 변수 사용 이유
1. static이 붙은 필드나 메서드는 '클래스의 소유'가 된다.
2. 어떤 클래스를 가지고 인스턴스를 무한히 생성하더라도 static은 클래스에 단 하나 존재한다.
3. 서비스나 컨트롤러, 테스트에서 인스턴스를 만들더라도 static 변수는 공동으로 사용한다.
4. 또한 애플리케이션이 시작되고 종료될 때까지 오로지 단 한번만 생성된다.
cleatStore() 생성 이유
이후 게시될 테스트케이스 작성 게시글에서 설명.
wrapper 클래스
[자바 공부] 형 변환 함수 차이 (parseXXX, valueOf, toString)
한눈에 정리 함수 설명 Integer.parseXXX() 기본 타입인 int 타입을 반환. Integer.valueOf() Integer 래퍼 객체를 반환. toString() 대상이 null이면 Null PointException(NPE)를 발생. String.valueOf() 대상이 null이면 문자열
sjd0219.tistory.com
'백엔드 > 스프링 입문' 카테고리의 다른 글
[스프링 입문] 회원 서비스 개발 (0) | 2023.12.02 |
---|---|
[스트링 입문] 회원 리포지토리 테스트 케이스 작성 (0) | 2023.12.01 |
[스프링 입문] 웹 개발 기초 (1) | 2023.11.28 |
[스프링 입문] 윈도우 명령 프롬프트에서 Gradle 빌드 (0) | 2023.11.27 |
[우테코] 종합 피드백 (0) | 2023.11.26 |