[BACK-END]/[SPRING]

Spring 백엔드 기초 중 기초 [회원관리]-(1)

지기음 2022. 12. 7. 14:11

***인프런 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