***인프런 Spring 김영한님의 강의를 듣고 복습하는 중입니다.***
spring 백엔드 기초 중 기초를 실습할 것이다. 회원관리 백엔드를 설계할 것이다.
필요한 기능은 그림을 그려서 설계하는 것이 좋다. 그림을 그릴때는 파일 / 함수 / 변수 모든것을 정의하고 시작하자!!!
데이터베이스를 쓰지 않으므로 메모리를 이용해 일회용 저장소를 만들겠다.!!!!
[그림]
저장소 만들기
1. member class 정의
우선 저장소를 만들기 전 Member class를 정의해줄것이다. member는 id와 String 이 포함될 수 있는 클래스로 정의하자
여기서 중요한 점 : intelliJ에서는 컨트롤+엔터를 누르면 게터세터를 자동으로 생성할 수 있다.
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;
}
}
2. 저장소 생성
이제 저장소를 생성하자. 저장소에 들어갈 기능은 총 4가지이다. (save , 이름 찾기 , id 찾기 ,전체 출력 )
일단 저장소를 생성하기 전, java인터페이스 기능을 구현하여 java의 장점을 최대한 활용하자!
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();
}
Optional <Member> 는 편하게 Member findById(Long id);로 이해해도 된다.
Optional을 쓰는 이유는
1. null 반환이 가능
2. 그 외 유용한 함수 쉽게 사용 가능
총 4개의 함수 인터페이스를 만든 다음 진짜 MemoryMemberRepository를 만들어보자
a) save 함수
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;
}
여기서 중점적으로 봐야할 점은 ID를 자동으로 설정한다는 점이다. 자동 설정된 아이디를 통해 HashMap에 (key: id , value: member)로 저장한다. (내 짧은 생각으로는 value값에 String name이 들어가야할 것 같은데 일단 강의 대로 진행하였다.... 추후 깨닫게 되겠지)
->value에 Member class가 들어가는 이유 : value값을 꺼낼 때 한번에 member를 꺼낼 수 있으니까!!!!!!
b)FindById 함수
제일 쉬운 함수 hashmap에 get을 이용해 쉽게 찾을 수 있다.
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
*Optional.ofNullable은 쉽게 생각해서 optional의 반환형태라고 생각하면된다 유용한 기능이니 어렵게 생각하지말자.
c)FindByName 함수
강의에서 보는 메소드는 내가 한번도 안써본 메소드라 이해하기 어렵다 천천히 이해하고 안되면 for each문 활용해서 만들 수 있다. 일단 이 코드를 외워보자
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
d)FindAll 함수
쉽지만 실무에서 유용하게 쓰는 팁이 한가지 숨겨져 있다.
처음 Member를 저장할 때 hashmap으로 저장했지만 출력할 때는 ArrayList로 출력한다. 예상하기로는 ArrayList가 더 다루기 편하기 때문이라고 생각한다. (삭제 등 기능 구현 떄문에)
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
++테스트코드를 위한 함수
e)clearStore 함수
추후 테스트 코드를 작성할 때 store변수의 중복을막기 위해 사용하는함수이다. 꼭 테스트 코드가 아니라도 항상 메모리는 청소해야한다는 생각을 가져보다 C나 C++이 아닌 JAVA더라도 메모리의 중복사용을 막는 습관을 가져보자 .
public void clearStore(){
store.clear();
}
'[BACK-END] > [SPRING]' 카테고리의 다른 글
Spring bean (0) | 2022.12.14 |
---|---|
Spring 백엔드 기초 중 기초 [회원관리]-(2) (0) | 2022.12.07 |
IntelliJ 단축키 (0) | 2022.12.05 |
정적 컨텐츠 / MVC / API 방식 기초 (0) | 2022.12.05 |
SPRING 시작 (0) | 2022.12.01 |