![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cBKJhz/btrvaIJ3ivI/RkQIAYrUnfM21KNrDzwRC1/img.png)
Kotlin 언어는 nullable 특성을 가지고 있다. 즉, null 값을 허용하며, 타입도 존재한다. 따라서 null이 될 수 있는 타입을 다룰 때 처리하는 방법을 정리하려고 한다. ?. (안전한 호출 연산자) 호출하려는 값이 null이 아니면, 일반 메서드 호출처럼 작동한다. 만약에 null 인 경우, null 값을 반환한다. fun safetyCallOperation(text: String?) { val result: String? = text?.toUpperCase() // 결과는??? } 위와 같은 코드가 있을 때, text 값이 null이 아니면, toUpperCase() 메서드를 호출하고, null인 경우 그대로 null 값을 반환한다. 따라서 result 변수의 타입은 String?이다...
Spring의 MessageSource를 사용하려고, message.properties 파일에 한글을 정의하고 나서, 테스트 코드를 실행하던 도중 한글 인코딩이 제대로 되지 않아서 발생했던 에러 해결방법을 정리하려고 한다. 상황 MessageSource 단위 테스트를 진행하기 위해서 아래와 같은 코드를 작성했고, messages.properties 파일은 다음과 같이 정의했다. // messages.properties test=테스트 @SpringBootTest public class MessageSourceTest { @Autowired private MessageSource messageSource; @Test void helloMessage() { String result = messageSourc..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/46rnj/btrveK61bju/RUW46EkmQH06HJzGcXH1yK/img.png)
Kotlin에도 Java 8 Stream과 동일한 지연 계산이 존재하며, Sequence 인터페이스를 활용해서 이를 처리한다. 이에 대해서 간략하게 정리해보려고 한다. 컬렉션 함수를 연쇄할 때, 처리되는 방식 컬렉션 함수의 경우에는 결과 컬렉션을 즉시 생성한다는 특징을 가지고 있다. 따라서 map과 filter를 연쇄해서 처리할 때, 계산 중간 결과를 새로운 컬렉션에 임시로 담는다. 예를 들어 아래와 같은 코드가 있다면, 다음과 같이 처리된다. people.map { it.age }.filter { it >= 30 } 컬렉션의 원소가 적은 경우에는 위와 같이 처리돼도 문제가 없지만, 컬렉션의 원소가 수십만 개에서 수백만 개로 이루어져 있는 경우에는 효율이 떨어지게 된다. 원소가 정말 많은 컬렉션에서 Se..