Loading...
Spring Framework Reference Documentation 7.0.2의 The Elvis Operator의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Elvis operator (?:)는 ternary operator 구문을 줄인 것으로,
Groovy 언어에서 사용됩니다.
ternary operator 구문을 사용하면 다음 Java 예제에서 보듯이 변수를 두 번 반복해야 하는 경우가 자주 있습니다:
1String name = "Elvis Presley"; 2String displayName = (name != null ? name : "Unknown");
대신 Elvis operator(Elvis의 헤어 스타일과의 유사성 때문에 이렇게 이름 붙여짐)를 사용할 수 있습니다. 다음 예제는 SpEL expression에서 Elvis operator를 사용하는 방법을 보여 줍니다:
1ExpressionParser parser = new SpelExpressionParser(); 2 3String name = parser.parseExpression("name ?: 'Unknown'").getValue(new Inventor(), String.class); 4System.out.println(name); // 'Unknown'
1val parser = SpelExpressionParser() 2 3val name = parser.parseExpression("name ?: 'Unknown'").getValue(Inventor(), String::class.java) 4println(name) // 'Unknown'
SpEL Elvis operator는 empty 문자열도 null 객체처럼 처리합니다. 따라서,<br>원래의 Java 예제는 operator의 의미를 거의 흉내 내는 것에 불과합니다: SpEL Elvis operator의<br>의미와 호환되려면 술어로 name != null && !name.isEmpty()를 사용해야 합니다. |
Spring Framework 7.0부터 SpEL Elvis operator는 java.util.Optional을<br>투명한 언래핑 의미로 지원합니다.<br>예를 들어, expression A ?: B가 주어졌을 때, A가 null이거나 empty Optional이면<br>expression은 B로 평가됩니다. 그러나 A가 non-empty Optional이면 expression은<br>Optional에 포함된 객체로 평가되며, 이로써 사실상 Optional을 언랩하게 되고,<br>이는 A.get()에 해당합니다. |
다음 listing은 더 복잡한 예제를 보여 줍니다:
1ExpressionParser parser = new SpelExpressionParser(); 2EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build(); 3 4Inventor tesla = new Inventor("Nikola Tesla", "Serbian"); 5String name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String.class); 6System.out.println(name); // Nikola Tesla 7 8tesla.setName(""); 9name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String.class); 10System.out.println(name); // Elvis Presley
1val parser = SpelExpressionParser() 2val context = SimpleEvaluationContext.forReadOnlyDataBinding().build() 3 4val tesla = Inventor("Nikola Tesla", "Serbian") 5var name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String::class.java) 6println(name) // Nikola Tesla 7 8tesla.setName("") 9name = parser.parseExpression("name ?: 'Elvis Presley'").getValue(context, tesla, String::class.java) 10println(name) // Elvis Presley
Elvis operator를 사용하여 expression에서 기본 값을 적용할 수 있습니다. 다음<br>예제는 @Value expression에서 Elvis operator를 사용하는 방법을 보여 줍니다:<br>java<br>@Value("#{systemProperties['pop3.port'] ?: 25}")<br><br>이는 시스템 프로퍼티 pop3.port가 정의되어 있으면 그 값을 주입하고, 프로퍼티가<br>정의되어 있지 않으면 25를 주입합니다. |
Ternary Operator (If-Then-Else)
Safe Navigation Operator