JAVA

[JAVA] return type(Optional)

응디 2022. 2. 16. 17:51

spring jpa는 유연한 반환 타입을 지원한다.

 

1. Collection(List)로 반환

: List 및 Collection은 데이터가 없어도 절대 null 이 뜨지 않는다.

empty 컬렉션이 반환이 된다. → size 0으로 찍힘(null 처리 따로 안해줘도됨)

List<Member> findListByUsername(String username); // 컬렉션

/*-------------------------------------------------------*/

// Test Code
@Test
    public void returnType() throws Exception{
        //given
        Member m1 = new Member("AAA", 10);
        Member m2 = new Member("BBB", 20);

        memberRepository.save(m1);
        memberRepository.save(m2);

        //when
        List<Member> result = memberRepository.findListByUsername("AAA");

        //then
        assertThat(result.get(0).getUsername()).isEqualTo(m1.getUsername());
    }

 

 

2. 단건으로 반환

: 단건 조회때는 데이터가 없으면 null을 반환한다. → null 처리가 필요하긴 함

Member findMemberByUsername(String username);   // 단건

/*-------------------------------------------------------*/

// Test Code
@Test
    public void returnType() throws Exception{
        ...
        Member result = memberRepository.findMemberByUsername("AAA");
        ...
    }

Jpa는 단건을 조회했을때 결과가 없으면 Exception을 던지는데

spring data jpa는 try/catch로 감싸서 굳이 exception을 터트리지 않고

알아서 null로 반환한다.(Optional이 나오기 전에 얘기)

 

 

3. Optional 단건 반환

: Optional은 반환값이 null 일 수 있다고 가정하고 시작하기 때문에 반환값이 null 이 나올수 있다면 Optional을 사용해 줘야함!

또한 Optional은 orElse... 등을 사용해서 null 처리 가능하다.

Optional<Member> findOptionalByUsername(String username);   // 단건 optional

/*-------------------------------------------------------*/

// Test Code
@Test
    public void returnType() throws Exception{
        ...
        Optional<Member> result = memberRepository.findOptionalByUsername("AAA");
        ...
    }