티스토리 뷰

Java

Elvis operator & Safe Navigation operator

작은 거인 2019. 7. 4. 15:42

배경

사놓고 반년 넘게 묵혀둔 '처음 배우는 스프링부트2' 예제를 따라하다가 thymeleaf 에서 희안한 문법을 쓰는것을 봤다.

th:value="${board?.idx}"

모델 객체로 넘겨준 board 옆에 붙은 물음표는 무엇인가? 삼항연산자 null 체크를 줄인거 같긴 한것 같은데 용법이 모호해서 책의 다음 페이지를 읽어 봤는데, 그냥 null check 해서 null이면 빈값을 출력 했다고 써있었다.

답답해서 thymeleaf null check syntax라고 검색을 했는데 stackoverflow를 통해 해당 문법이 Safe Navigation operator이라는 것을 알게 되었다. 해당 답변의 링크를 따라가보니 스프링 레퍼런스 페이지에서 해당 내용을 찾을 수 있었고, 그 밑에 Elvis operator에 대한 설명이 주석으로 써있어서 표현식으로만 둘을 간단히 정리해보고자 한다.

 

삼항연산자

String name = null;
name != null ? name : "기본값";
System.out.println(name); // 기본값

 

엘비스 연산자

String name = null;
name ? : "기본값";
System.out.println(name); // 기본값

 

세이프 네비게이션 연산자

Person person = null; 
person?.name; // name은 Person 클래스의 맴버 변수
System.out.println(name); // null - NullPointerException을 던지지 않는다!!!

 

정리

Safe Navigation Operator는 DTO를 뷰 단에 뿌려줄때, 해당 DTO가 null로 넘어오면 익셉션 없이 빈값을 출력할 수 있게 해준다.

Elvis Operator는 특정값이 null로 넘어올때 기본값을 정하기 편한 연산자. 용례로, @Value 표현식을 사용할 때, pop3.port가 정의되어 있으면 값을 삽입하고 아니라면 25를 삽입한다.

@Value("#{systemProperties['pop3.port'] ?: 25}")
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함