코틀린 54

[Kotlin] 구조 분해 선언과 component 함수

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전에 data class 를 다룬 글에서 간단히 구조 분해 선언(destructuring declaration) 을 살펴보았다 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화할 수 있다. 구조 분해를 사용하는 방법 val p = Point(10, 20) val (x, y) = p assert(x == 10 && y == 20) 구조 분해 선언은 일반 변수 선언과 비슷하지만 `=` 의 좌변에 여러 변수를 괄호로 묶는다. 구조 분해 선언은 내부적으로 관례를 사용 내부에서 구조 분해 선언은 관례를 사용한다. 구조 분해 선언의 각 변수를 초기화하기 위해 `compo..

Kotlin 2024.01.24

[Kotlin] 컬렉션과 범위에 대해 쓸 수 있는 convention(관례)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 컬렉션에는 인덱스 연산자(`a[b]`) 를 사용항 인덱스로 원소를 설정하거나 가져올 수 있다. `in` 연산자는 원소가 컬렉션이나 범위에 속하는지 검사하거나 원소를 iteration 할 때 사용한다. 커스텀 클래스에서 이러한 연산들을 추가할 수 있다. 인덱스로 원소에 접근: get & set 코틀린이나 자바에서 맵이나 배열 원소에 접근할 때 모두 `[]` 을 사용한다. 코틀린에서는 인덱스 연산자도 convention 을 따른다. 인덱스 연산자를 사용해 원소를 읽는 연산 -> `get` 연산자 메서드로 변환 인덱스 연산자를 사용해 원소를 쓰는 연산 -> `set` 연산자 메서드로 변환 `Po..

Kotlin 2024.01.24

[Kotlin] 비교 연산자 오버로딩

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린에서는 산술 연산자와 마찬가지로 원시 타입 값뿐 아니라 모든 객체에 대해 비교 연산을 수행할 수 있다. 자바에서는 객체 비교 시 `equals` 나 `compareTo` 를 호출해야 함 코틀린에서는 `==` 비교 연산자를 오버로딩하여 사용 가능 이번에는 비교 연산자를 지원하는 convention(관례) 를 살펴보자. 동등성 연산자: equals 코틀린은 `==` 연산자 호출을 `equals` 메서드 호출로 컴파일한다. 이는 다른 산술 연산자 오버로딩처럼 convention 을 적용한 것이다. `!=` 연산자를 사용하는 식도 `equals` 호출로 컴파일된다. (비교 결과를 뒤집은 값을..

Kotlin 2024.01.24

[Kotlin] 산술 연산자 오버로딩

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린에서는 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 convention(관례)라고 한다. 언어 기능을 타입에 의존하는 자바와 달리 코틀린은 함수 이름을 통한 convention 에 의존한다. 자바에서는 원시 타입, `String` 에 대해서만 산술 연산자를 사용할 수 있다. 코틀린에서는 다른 클래스에서도 산술 연산자를 사용할 수 있다. 이항 산술 연산 오버로딩 `plus` 연산자 구현하기 data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { // plus 라는 이름의 연산..

Kotlin 2024.01.23

[Kotlin] 객체 타입의 배열 & 원시 타입의 배열

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린 배열 사용하기 자바 `main` 함수의 표준 시그니처에는 배열 파라미터가 들어있다. 코틀린의 `main` 함수에도 배열 파라미터가 들어갈 수 있다. (kotlin 1.3 이후에는 문자열 배열이 들어가지 않아도 된다.) 코틀린 `main` 함수에서 배열 사용 fun main(args: Array) { for (i in args.indices) { // 배열의 인덱스 값의 범위에 대해 iteration (array.indices 확장 함수 사용) println("Argument $i is: ${args[i]}") // array[index] 로 인덱스를 사용해 배열 원소에 접근 } } ..

Kotlin 2024.01.22

[Kotlin] 코틀린,자바 컬렉션과 nullability, 변경 가능성

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability 와 Collection 컬렉션에 대해 nullable 을 적용할 때는 조심해야 한다. 리스트 자체가 nullable 인지, 원소가 nullable 인지, 혹은 둘 다 nullable 인지를 잘 고려하자. nullable 값으로 이뤄진 컬렉션 예제 fun readNumbers(reader: BufferedReader): List { val result = ArrayList() // Int? 값으로 이뤄진 리스트 생성 for (line in reader.lineSequence()) { try { val number = line.toInt() result.add(number..

Kotlin 2024.01.22

[Kotlin] 코틀린의 원시 타입

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 원시(Primitive) 타입 자바는 `int` 등의 원시(Primitive) 타입 과 `String` 등의 참조(Reference) 타입을 구분한다. 원시 타입에는 변수에 값이 그대로 들어간다. 참조 타입에는 메모리 상의 객체의 위치가 변수에 들어간다. 자바의 원시 타입은 컬렉션에 넣을 수 없다. 또한 원시 타입의 멤버, 확장 메서드를 호출할 수 없다. 위와 같은 경우에는 `java.lang.Integer` 와 같은 참조 타입이 필요하다. 참조 타입은 원시 타입 값을 감싸서 사용하는 것이다. (`int` 를 감싼 `Integer` 를 컬렉션에 넣기 : `Collection`) 하지만 코틀..

Kotlin 2024.01.18

[Kotlin] Nullability(널 가능성) - 2

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전 글에서 이어진다. 이전 글 : https://sh1mj1-log.tistory.com/211 [Kotlin] Nullability(널 가능성) - 1 Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability(널 가능성)은 NPE(`NullPointerException`) 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코 sh1mj1-log.tistory.com 지연 초기화할 프로퍼티 실제로는 not-null 인 프로퍼티인데 생성자 안에서 not-null 값으로 초기화할 방법이 없는 경우가..

Kotlin 2024.01.18

[Kotlin] Nullability(널 가능성) - 1

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. Nullability(널 가능성)은 NPE(`NullPointerException`) 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코틀린과 다른 최신 언어에서 null 에 대한 접근을 런타임에서 컴파일 타임으로 옮겼다. 그래서 컴파일 시 NPE 여부를 미리 검사하여 NPE 예외 가능성을 줄인다. 이번 글은 볼륨이 꽤 되어서 두 개의 글로 나누어서 설명한다. 다음 글: https://sh1mj1-log.tistory.com/212 [Kotlin] Nullability(널 가능성) -2 Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금..

Kotlin 2024.01.18

[Kotlin] 수신 객체 지정 람다, 스코프 함수: with, apply, run, let, also

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 자바에는 없는 코틀린 람다의 독특한 기능이 있다. 바로 수신 객체를 명시하지 않고 람다의 본문 안에서 수신 객체의 메서드를 호출할 수 있도록 하는 것이다. 그런 람다를 수신 객체 지정 람다(lambda with receiver)라고 한다. Scope function(스코프 함수) 대표적인 수신 객체 지정 람다 함수를 알아보기 전 Scope function(스코프 함수)에 대해 먼저 알아보자. 코틀린 공식 문서에서는 스코프 함수를 이렇게 설명한다. 코틀린 stlib 에는 객체의 컨텍스트 내에서 코드 블록을 실행하는 것만을 목적으로 하는 여러 함수가 있다. 람다 식이 제공된 객체에서 이러한 함..

Kotlin 2024.01.17