Optional.ofNullable

연어는결국강으로·2023년 11월 6일
0

자바 공부

목록 보기
6/6

멀티파트 파일 null체크를 하고 업로드하는 로직을 구현했다. 결과는 아래와 같다.

AwsS3 awsS3;
	if (!dto.getFile().isEmpty()) {
    	awsS3 = awsS3Service.upload(dto.getFile(), "tayo");
    } else {
    	awsS3 = null;
    }

음... 저기서 구멍이 있었다. 바로 dto.getFile에서 NPE가 나타날 수도 있다는 것이다. 해당 로직을 수정하면 아마도 아래처럼 될 것이다.

AwsS3 awsS3;
	if (dto.getFile != null && !dto.getFile().isEmpty()) {
    	awsS3 = awsS3Service.upload(dto.getFile(), "tayo");
    } else {
    	awsS3 = null;
    }

하고보니 뭔가 지저분하다. 나는 Optional을 배웠는데 왜 저렇게 쓰고 있는것인가. 옵셔널을 쓴다면 좀 더 세련되게 표현할 수 있을거라고 생각했다.

옵셔널로 표현한 코드는 아래와 같다.

AwsS3 awsS3 = Optional.ofNullable(dto.getFile())
                .filter(image -> !image.isEmpty())
                .map(image -> awsS3Service.upload(image, "tayo"))
                .orElse(null);

.ofNullable 에서 dto의 getFile의 객체가 null인지 파악한다. 즉, dto.getFile != null 이 부분과 같다.
.filter에서는 파일이 비어있는지를 체크한다.
.map에서는 upload하고 나온 결과 객체를 반환한다.
.orElse 그리고 만약 없으면 null을 반환한다.

0개의 댓글