티스토리 뷰

반응형

 

 

 

 



 

 

SpringBoot

 

 

 

Optional 클래스를 사용하면 null 처리를 쉽고 가독성 좋게 표현해줄 수 있습니다.

 

그 중 JPA에서 자주 사용하는

엔티티 ID 값으로 조회하는 findById 는 Optional<> 로 리턴하는 메소드 중 하나인데요.

 

Optional<T> findById(ID id);

 

 

이렇게 id 값에 따른 엔티티를 조회하여 

엔티티가 존재하지 않을 경우 대체처리하는 로직을 간결하게 수행할 수 있습니다.

 

 

저도 연관된 id 값을 반복 돌리면서

update를 수행하는 코드가  있었는데

 

생각없이 조건문과 isPresent() 를 이용해서 코드를 작성해놓고 보니

if != null  처리와 뭐가 다른가 싶은 생각이 들었습니다.

 

param.getFileList().forEach(file -> {
	Optional<requestFileEntity> loadEntityOptional  = fileRepository.findById(file);
	if(loadEntityOptional.isPresent()) {
		loadEntityOptional.get().updateParentUuid(requestEntity);
	}            
});

 

 

requestFileEntity 의 영속성으로 update 를 하려다 보니 위와 같은 코드를 작성하게 되었고

동작에는 문제가 없으나 Optional을 쓰는 의미가 있나 싶은 코드가 되서

 

 

ifPresent 로 코드를 바꿔봤습니다.

 

ifPresent 는 아래와 같이 정의되어 있습니다.

public void ifPresent(Consumer<? super T> consumer) {
        if (value != null)
            consumer.accept(value);
    }

 

 

 

param.getFileList().forEach(file -> {
	Optional<requestFileEntity> loadEntityOptional  = fileRepository.findById(file);
	loadEntityOptional.ifPresent(entity -> {
		entity.updateParentUuid(requestEntity);
	});
});

 

엔티티가 null 아니고 존재할 경우에만 지정자를 호출하여 다음 동작을 수행하게 됩니다.

 

 

Optional.isPresent() 남발로 if null 조건문 처럼 쓰지 말자는 취지로 포스트를 작성하게 되었고

Optional 에 구현된 것들을 실제로 다 사용해보진 않았지만 

잘 활용하면 무수히 반복적으로 길어지는 조건문을 한줄로도 처리 가능함을 얻게 되었습니다.

 

 

 

요즘엔 새로운 코드를 작성하는 것보다

이 코드를 어떻게 더 간결하고 가독성있게 할까 고민해보는게 재밌는 것 같다.

 

 

 

 

 



 

 

 

 

 

 

 

 

 

자바8 Optional 2부: null을 대하는 새로운 방법

Engineering Blog by Dale Seo

www.daleseo.com

 

반응형
댓글
반응형
최근에 올라온 글
«   2024/11   »
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
Total
Today
Yesterday