Book
-
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에 대한 접근 방법은 가능한 한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 여러 가지 오류를 컴파일 시..
-
[Java] Effective Java: 제 2장 (1) 생성자 대신 정적 팩터리 서드를 고려하라Book/Effective Java 2022. 11. 22. 22:52
이 글은 이펙티브 자바 책에 대해 정리하며 책에 있는 부분 중 모르는 내용을 긁어와서 정리하는 글입니다. 모르는 부분이 아니더라도 번역체라 이해하기 힘든 부분을 정리합니다. 1. 정적 팩터리 메서드(static factory method) 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이다. - 여기서 클래스와 인스턴스, 그리고 객체의 개념에 대해서 살펴보자. 객체 지향 언어란 프로그램을 다수의 객체로 만들고, 이들끼리 서로 상호작용하도록 만드는 프로그래밍 언어이다. 클래스의 개념 - 객체를 만들어 내기 위한 설계도 혹은 틀 - 연관되어 있는 변수와 메서드의 집합 객체의 개념 = 클래스의 인스턴스 - 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다. - 소프트웨어 세계에 ..
-
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개 이상을 사용할 경우에는 한개를 내부클래스를 사용하게 되면 한개를 상속받아..
-