반응형
Optional
Optional은 값이 있을 수도 있고 없을 수도 있는 상황을 처리할 때 사용합니다.
이를 통해 null을 직접 다루지 않고, 값의 유무를 명시적으로 처리할 수 있습니다.
NullPointerException을 방지하면서 코드 가독성을 높일 수 있다.
Map()
- Optional.map() 은 값이 있으면 해당 값을 꺼내와서 코드 블럭을 실행합니다.
- map() 함수는 간단히 A type을 B type으로 변경하는 역할을 합니다.
- Optional을 사용하면서 메서드 체이닝을 사용해 처리할 수 있습니다.
public String getTeamNameFromDevice(Optional<Device> optDevice){
return optDevice
.map(Device::getOwner)
.map(User::getTeam)
.map(Team::getName)
.orElseThrow(IllegalStateException::new);
}
Optional 객체에 대해 객체 그래프 탐색을 할 때 NullPointerException이 발생할 수 있는데 이때 map() 메서드를 이용하여 간단하게 처리할 수 있습니다.
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise return an empty Optional.
값이 존재하는 경우, 매핑 함수를 적용하고, 결과가 Null이 아닌 경우 Optional로 감싼 결과를 반환하고, 값이 null인 경우 빈 Optional 객체를 반환한다.
이러한 Optional의 특징을 살려서 null 일수도 있는 값을 Optional로 감싸서 전달하면 값에 안전하게 접근할 수 있습니다.
if 문으로 처리한 코드
public String getTeamNameFromDevice(Device device){
if(device == null) throw new IllegalStateException();
User owner = device.getOwner();
if(owner == null) throw new IllegalStateException();
Team team = owner.getTeam();
if(team == null) throw new IllegalStateException();
String teamName = team.getName();
if(teamName == null) throw new IllegalStateException();
return teamName;
}
orElse()
- orElse()는 Optional 내부 객체의 상태와 상관없이 무조건 실행되는 메서드이비다.
- Optional 내부 객체가 null이든 아니든 실행됩니다.
private static String wontRunThis() {
System.out.println("Won't run this");
return "foo";
}
public void optional1() {
String o = Optional.of("Hello World!").orElse(wontRunThis());
System.out.println("Result : " + o);
}
orElseGet()
- orElseGet()은 내부 객체가 null인 경우에만 실행됩니다.
public void optional2() {
String o = Optional.of("Hello World!").orElseGet(() -> wontRunThis());
System.out.println("Result : " + o);
}
isPresent()
- Optional 객체가 값을 포함하고 있는지 여부를 확인하는 메서드입니다.
- boolean을 반환하는 메서드이다.
Optional<String> optional = Optional.of("Hello");
if (optional.isPresent()) {
System.out.println("Value exists: " + optional.get());
}
ifPresent()
- Optional 객체에 값이 있을 때만 실행할 로직을 지정할 수 있는 메서드입니다.
- 값이 존재하면 전달된 Consumer 함수형 인터페이스를 사용해 해당 로직을 수행하고, 값이 없으면 아무 동작도 하지 않습니다.
- 반환형이 없는 메서드로, 값의 유무에 따라 특정 로직을 실행하려고 할 때 사용합니다.
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(value -> System.out.println("Value exists: " + value));
관련 자료
반응형
'Spring Framework > Spring' 카테고리의 다른 글
Spring Annotation과 Meta Annotation 이해하기 - 어노테이션 활용법 (0) | 2024.11.21 |
---|---|
Spring AttributeConverter로 엔티티와 DB 컬럼 간 데이터 변환하기 - 엔티티와 DB 컬럼 매핑 (0) | 2024.11.16 |
Java HashMap vs LinkedHashMap 차이점 - 스프링에서 데이터 삽입 순서 유지하기 (1) | 2024.11.09 |
Spring 정렬 Sort, Order 클래스 이해하기 - 정렬 방향, 속성 접근하기 (0) | 2024.11.08 |
Spring MessageSource를 이용한 다국어 메시지 처리: LocaleResolver와 LocaleContextHolder 활용법 (1) | 2024.10.19 |