Book/Kotlin in Action
-
Kotlin in Action: 6.3 컬렉션과 배열Book/Kotlin in Action 2022. 11. 25. 00:54
6.3 컬렉션과 배열 6.3.1 널 가능성과 컬렉션 컬렉션을 선언할 때 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻으로 사용할 수 있다. 널이 될 수 있는 객체를 만들 때 전체를 널이 될 수 있게 만드는지, 아니면 원소만 널이 될 수 있게 만드는지 조심해야 한다. fun addValidNumbers(numbers: List) { var sumOfValidNumbers = 0 var invalidNumbers = 0 for (number in numbers) { if (number != null) { sumOfValidNumbers += number } else { invalidNumbers++ } } println("Sum of valid numbers: $sumOfValidNumb..
-
Kotlin in Action: 6.2 코틀린의 원시 타입Book/Kotlin in Action 2022. 11. 25. 00:25
6.2 코틀린의 원시 타입 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 6.2.1 원시 타입: Int, Boolean 등 자바는 원시 타입과 참조 타입을 구분한다. 원시타입의 변수에는 그 값이 직접 들어가지만, 참조 타입의 변수에는 메모리상의 객체 위치가 들어간다. 이 방법으로 원시 타입의 값을 더 효율적으로 저장하고 여기저기 전달할 수 있지만, 그런 값에 대해 메소드를 호출하거나 컬렉션에 원시 타입 값을 담을 수는 없다. 만일 참조 타입이 필요한 경우 특별한 래퍼 타입등으로 원시 타입 값을 감싸서 사용한다. 정수의 컬렉션을 정의하려면 Collection가 아니라 Collection를 사용하는 것처럼 말이다. 코틀린은 원시 타입과 래퍼 타입을 구분하지 않으므로 항상 같은 타입을 사용한다. 다음 예..
-
Kotlin in Action: 6장 코틀린 타입 시스템: 6.1 Nullable(널 가능성)Book/Kotlin in Action 2022. 11. 24. 23:48
6. 코틀린의 타입 시스템(type system) 자바와 비교하면 코틀린의 타입 시스템은 코드의 가독성을 향상시키는 데 도움이 되는 몇가지 특성을 새로 제공한다. 그런 특성으로는 Nullable type과 읽기 전용 컬렉션이 있다. 또한 코틀린은 자바 타입 시스템에서 불필요하거나 문제가 되던 부분을 제거했다. 배열 지원이 그런 부분에 속한다. 6.1 널가능성(Nullable) 널 가능성은 NullPointerException 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 여러 가지 오류를 컴파일 시..
-
Kotlin in Action: 5.5 수신 객체 지정 람다 : with와 applyBook/Kotlin in Action 2022. 11. 18. 09:21
코틀린 람다에서는 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 해주는 지정 람다 기능이 있다. 1. with 함수 코틀린 에서는 with라는 라이브러리 함수를 통해 어떤 객체의 이름을 반복하지 않고도 그 객체에 대해 다양한 연산을 수행할 수 있는 기능을 제공한다. fun alphabet(): String { val stringBuilder = StringBuilder() return with(stringBuilder) { for (letter in 'A'..'Z') { this.append(letter) } append("\nNow I know the alphabet!") this.toString() } } with 함수는 첫 번째 인자로 받은 객체를 두 번째 인자..
-
Kotlin in Action: 5.4 자바 함수형 인터페이스 활용Book/Kotlin in Action 2022. 11. 18. 09:05
코틀린 프로그래밍을 하다보면 다루는 API의 대부분이 자바로 작성된 API이다. 그래서 이번 장에서는 자바 API를 사용할 때 람다를 인자로 전달하는 방법에 대해서 자세히 알아본다. 단일 추상 메소드(SAM) 인터페이스(함수형 인터페이스라고도 부른다)는 추상 메소드를 하나만 가지고 있는 인터페이스를 뜻한다. 자바 API에는 Runnable이나 Callable과 같은 함수형 인터페이스와 그런 함수형 인터페이스를 활용하는 메소드가 많다. 자바8 이전의 자바에서는 메소드에게 인자로 넘기기 위해 무면 클래스의 인스턴스를 만들어야 했다. 코틀린은 함수형 인터페이스를 인자로 취한 자바 메소드를 호출할 때 (무명 내부 클래스 인스턴스 대신) 람다를 넘길 수 있게 해준다. 더보기 자바와 달리 코틀린에는 제대로 된 함수..
-
Kotlin in Action: 5.3 지연계산(lazy) 컬렉션 연산Book/Kotlin in Action 2022. 11. 18. 00:50
5.3 지연계산 컬렉션 연산 map이나 filter같은 컬렉션 함수는 결과 컬렉션을 "즉시" 생성한다. 이는 컬렉션 함수를 연쇄하면 매 단계마다 계산 중간 결과를 새로운 컬렉션에 임시로 담는다는 말이다. 시퀀스를 사용하면 중간 임시 컬렉션을 사용하지 않고도 컬렉션 연산을 연쇄할 수 있다. 아래 부분은 책에 있는 그대로 적은 건데 번역본이라서 그런지 이해가 잘 되지 않는다. 더보기 코틀린 지연 계산 시퀀스는 Sequence 인터페이스에서 시작한다. 이 인터페이스는 단지 한 번에 하나씩 열거될 수 있는 원소의 시퀀스를 표현할 뿐이다. Sequence안에는 iterator라는 단 하나의 메소드가 있다. 그 메소드를 통해 시퀀스로부터 원소 값을 얻을 수 있다. 시퀀스 원소는 필요할 때 비로소 계산된다. 따라서 ..
-
Kotlin in Action: 5.2 컬렉션 함수형 APIBook/Kotlin in Action 2022. 11. 17. 23:56
1. 필수적인 함수: filter와 map filter와 map은 컬렉션을 활용할 때 기반이 되는 함수다. 대부분의 컬렉션 연산을 이 두 함수를 통해 표현할 수 있다. filter 함수는 컬렉션을 이터레이션하면서 주어진 람다에 각 원소를 넘겨서 람다가 true를 반환하는 원소만 모은다. 결과는 입력 컬렉션의 원소 중에서 주어진 술어(참/거짓을 반환하는 함수를 술어라고 한다)를 만족하는 원소만으로 이뤄진 새로운 컬렉션이다. data class Person(val name: String, val age: Int) val people = listOf(Person("Alice",29),Person("Bob",31) println(people.filter{it.age (Person::name) 그리고 30살 이상..
-
Kotlin in Action: 5.1 람다로 프로그래밍Book/Kotlin in Action 2022. 11. 15. 18:17
-이 글은 책 Kotlin in Action의 5장을 정리한 글입니다. 5.1 람다 식과 멤버 참조 1. 람다란 무엇일까? : 코드 블록을 함수 인자로 넘기기 이벤트가 발생하면 이 핸들러를 실행하자, 데이터 구조의 모든 원소에 이 연산을 적용하자 와 같은 생각으로 코드를 표현하기 위해 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 하는 경우가 자주 있다. 예전 자바에서는 무명 내부 클래스를 통해 이 목적을 달성했다. 근데 이 방법은 매우 번거롭다. 무명 내부 클래스(내부 무명 클래스)에 대한 내용은 다음과 같다. 내부 클래스란, 하나의 클래스 안에 다른 클래스를 정의한 클래스이다. 자바에서는 다중 상속이 되지 않기 때문에 2개 이상을 사용할 경우에는 한개를 내부클래스를 사용하게 되면 한개를 상속받아..