본문 바로가기
프로그래밍/SpringMVC_기초

회원관리 예제-2 (Optional)

by ILove_NS_MoKa 2023. 10. 14.

 

Member Class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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;
    }
}
 
cs

 

 

 

Interface  MemberRepository 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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> findBiyId(Long id);
    Optional<Member> findBiyName(String name);
    List<Member> findAll();
 
}
 
cs

 

Class MemoryMemberRepository 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 hello.hellospring.domain.Member save(hello.hellospring.domain.Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return  member;
    }
 
    @Override
    public Optional<hello.hellospring.domain.Member> findBiyId(Long id) {
        return Optional.ofNullable(store.get(id));
    }
 
    @Override
    public Optional<hello.hellospring.domain.Member> findBiyName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }
 
    @Override
    public List<hello.hellospring.domain.Member> findAll() {
        return new ArrayList<>(store.values());
    }
}
 
cs

 

Optional

Java8에서는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메소드를 제공해준다.

 

https://dev-coco.tistory.com/178

 

[Java] Optional 올바르게 사용하기

개요 Java 언어 설계자인 Brian Goetz는 Optional 을 만든 의도를 다음과 같이 공식 API 문서에 작성해 두었다. API Note: Optional is primarily intended for use as a method return type where there is a clear need to represent "no re

dev-coco.tistory.com

 

'프로그래밍 > SpringMVC_기초' 카테고리의 다른 글

회원관리예제-4 (MemberService) (di,After&BeforeEach )  (0) 2023.10.18
회원관리 예제-3 (Test Case) (assertThat)  (0) 2023.10.14
회원관리 예제 -1  (0) 2023.10.14
API  (0) 2023.10.14
MVC와 템플릿 엔진  (0) 2023.10.13