Optional의 orElseGet()과 orElse()

Kevin·2023년 11월 20일
0

JAVA

목록 보기
2/4
post-thumbnail

Optional에서 orElse와 orElseGet의 차이점

orElse()

String isNull;
String name;
        
isNull = "loose";
name = Optional.ofNullable(isNull).orElse("test");

System.out.println(name); //isNull값이 null이 아니므로 "loose" 출력

isNull = null;
name = Optional.ofNullable(isNull).orElse("test");

System.out.println(name); //isNull값이 null이므로 "test" 출력

→ Optional에 올 값이 null인 경우 orElse 안에 있는 내용을 실행 시킨다.

→ orElse를 사용할 때는 Optional의 대상이 되는 값과 orElse 내의 매개변수 리턴 값은 같아야 한다.
만약 같지 않다면 orElse가 아닌 if문을 이용해서 처리해야 한다.

→ 위 코드에서 orElse()의 리턴 값이 String이므로 변수의 타입 또한 String이다.


orElseGet()

private String getName(){
	return "loose";
}

String name1 = Optional.ofNullable("loose").orElseGet(() -> "loose");
String name2 = Optional.ofNullable("loose").orElseGet(() -> getName());

System.out.println("name1 = " + name1);
System.out.println("name2 = " + name2);

//출력 결과
//name1 = loose
//name2 = loose

→ orElseGet()은 람다식을 매개변수로 받는다

즉 간단하게 정리를 하면 아래와 같다.

orElse는 매개변수가 고정 값일 때 사용하고 orElseGet은 매개변수가 메소드일 때 사용하는 것이 좋다.

만약 orElse의 매개변수에 메서드를 넘기면 어떻게 될까?

→ Optional 인자가 null이 아니어도 그냥 실행되어 버린다.

→ 그렇기에 null일 경우 호출되면 안될 메서드가 호출되는 위험성이 존재한다.

orElseGet()이 고정된 값일 때도 사용함으로 그냥 편하게 orElseGet()을 사용하자.


orElseThrow()

User user = userRepository.findById(id)
        .orElseThrow(() -> new IllegalArgumentException("user doesn't exist");

→ null인 경우에 예외를 반환한다.

profile
Hello, World! \n

0개의 댓글