if (study)/Java & Kotlin
코틀린을 다루는 기술 9장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 예제도 이해하기가 어렵고 점점 정리하기가 어려워져간다... 모든 api를 while문 대신 재귀 호출로 작성하는 도서가 있다?! 이 책의 재귀 사랑은 멈출 기세가 보이지 않는데...!! 9.1 즉시 계산과 지연 계산 즉시 계산 언어는 메서드나 함수의 인자를 평가할 때는 즉시 계산을 사용한다. 하지만 다른 구성 요소는 지연 계산이다. val x = getValue() 즉시 계산 언어 : x의 참조가 선언되자마자 getValue() 함수가 호출되어 값을 할당한다. 즉 식이나 값을 작성하자마자 계산한다. 지연 계산 언어 : x에 의해 참조되는 값이 쓰이는 시점에 getValue()가..
코딩을 하다보면 프로퍼티를 선언하는 동시에 초기화를 할 수 없거나, 초기 생성 비용이 비싼 인스턴스를 만들어야 하는 경우가 있다. 코틀린으로는 이런 경우 보통 lateinit이나 lazy를 사용해 지연초기화를 하게 된다. lateinit는 초기화 타이밍을 놓치는 실수의 여지가 존재하기 때문에 개인적으로는 lazy 사용을 선호한다. lazy는 () -> T 타입 람다식을 인자로 받아서, delegated properties를 사용하는 Lazy 타입 인스턴스를 반환하는 함수다. by lazy { ... }의 연산 결과는 캐싱된다. fun main() { val repeatCount = 2 val lazyTest by lazy { println("두근두근 하는 중") Thread.sleep(1000L) "두근..
코틀린을 다루는 기술 8장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 이번 장의 목표 6장에서 구현한 함수 중 일부 함수를 더욱 효율적으로 구현하는 기법을 알아본다. 리스트 연산을 자동으로 병렬화해 최근 컴퓨터에 탑재되는 멀티 코어 아키텍처의 장점을 살리는 법을 살펴본다. 이 장에서 다루는 내용 메모리로 리스트 처리 속도 높이기 List와 Result 합성하기 인덱스로 리스트 접근 구현하기 리스트 펼치기 자동으로 리스트 병렬 처리하기 앞 장에서 구현한 코드를 기반으로 내용이 유기적으로 이어지고 있다. 8.1 length의 단점 foldLeft 함수는 리스트의 모든 원소를 연속적으로 합성한다. 이로인해 전체 실행 시간은 리스트의 길이와 비례한다. ..
두 개의 List가 있을 때, 중복되는 element 개수를 찾는 방법을 알아보자. 예를들어 list1 = [1, 2, 3, 4, 5], list2 = [4, 5, 6, 7] 가 주어진다면, 중복되는 값은 [4, 5]이므로 2를 찾아내야 한다. 물론 방법은 이거 말고도 무궁무진 하겠지만, 몇가지 예제를 만들어봤다. 검색 대상인 요소가 하나 뿐이라면, Collections.frequency()를 사용할 수 있다. fun main() { val list1 = listOf(1, 2, 3, 4, 5) val key = 5 val frequency = Collections.frequency(list1, key) println(frequency) // 1 } filter 사용하기 fun main() { val li..
코틀린을 다루는 기술 7장을 읽고 정리한 내용입니다. 요약된 표현이 많기에 보다 자세한 설명은 책을 통해 확인하실 수 있습니다. 6장에서는 Option으로 선택적 데이터를 처리하는 방법을 배웠다. Option은 데이터가 없다는 사실을 알릴 수는 있지만, null이 발생한 이유를 제공하지 않는다는 문제점이 있다. 데이터가 없는 모든 이유를 똑같이 취급하고 그 이유를 호출한 쪽에서 추측해야만 했다. 이 장에서는 코틀린에서 오류와 예외를 처리하는 방법을 배운다. Option의 문제점을 보완하여 데이터 부재를 표현하는 Either 타입과 Result 타입을 살펴보자. 대부분의 예제 코드는 이 저장소에 있는 내용을 참고했다. 7.1 데이터가 없는 경우와 관련한 문제점 readLine()으로 문자열을 읽어들이는 함..