Kotlin 51

[Kotlin] 중위 호출 & 구조 분해 선언

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. infix call(중위 호출) 우리는 맵을 만들 때 `mapOf` 함수를 사용해서 아래처럼 만들어 왔다. val map = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 그런데 여기서 `to` 는 코틀린의 특별한 키워드가 아닌 일반 함수라고 했다. 이 코드는 infix call(중위 호출)이라는 특별한 방식으로 to 라는 일반 메서드를 호출한 것이다. 중위 호출 시에는 수신 객체와 유일한 메서드 인자 사이에 메서드 이름을 넣는다. (`[수신 객체] [메서드 이름] [유일한 메서드 인자]`) 이 중위 호출이 가능한 메서드는 일반 호출로도 사용..

Kotlin 2024.01.03

[Kotlin] 컬렉션 처리 API 확장 & 가변 인자(vararg) 함수

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 자바 컬렉션 API 확장 이전에 코틀린 컬렉션은 자바와 같은 클래스를 사용하지만 더 확장된 API 를 제공한다고 했다. @Test fun collectionExtension() { val strings: List = listOf("first", "second", "fourteenth") println(strings.last()) // fourteenth printed val numbers: Collection = setOf(1, 14, 2) println(numbers.max()) // 14 printed } 이런 코드가 어떻게 작동할까? 어떻게 자바 라이브러리의 컬렉션에 대해 코틀린에서 ..

Kotlin 2024.01.03

[Kotlin] 확장 함수 & 확장 프로퍼티

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 확장함수 - 메서드를 다른 클래스에 추가하기 저번 글에서 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스이지만, 코틀린에서는 아래 코드에서처럼 자바보다 더 많은 기능을 쓸 수 있다고 했다. 우리는 extension function(확장 함수)를 사용하여 기존 JVM 언어 API 를 재작성하지 않고도 코틀린이 제공하는 여러 편리한 기능을 사용할 수 있다. 확장함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수이다. `StringUtil` 이라는 파일을 만들어서 어떤 문자열의 마지막 문자를 돌려주는 메서드를 추가해보자. fun String.lastChar()..

Kotlin 2024.01.01

[Kotlin] 컬렉션에서의 함수 정의와 호출

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린 컬렉션, 문자열, 정규식에서의 함수 정의와 호출 기능을 알아봅니다. 코틀린 컬렉션 만들기 아래와 같이 set 과 리스트, 맵을 만들 수 있다. private val set = hashSetOf(1, 7, 53) private val list = arrayListOf(1, 7, 53) private val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 여기서 `to` 는 코틀린의 키워드가 아닌 일반 함수이다. (나중에 조금 더 자세히 다룬다.) @Test fun printObjectType() { println(set...

Kotlin 2024.01.01

[Kotlin] 예외 처리

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린의 exception 처리는 자바나 다른 언어의 예외 처리와 비슷하다. 정상적인 종료가 아닐 때 예외를 던질 수 있고(`throw`), 함수 호출부에서는 그 예외를 잡아서 처리할 수 있다. 발생한 예외를 함수 호출부에서 처리하지 않으면 함수 호출 스택을 거슬러 올라가면서 예외를 처리하는 부분이 나올 때까지 예외를 다시 던진다(`rethrow`). 코틀린의 기본 예외 처리 코드 예시를 보자. 자바와 비슷하다. if (percentage !in 1..100) { throw IllegalArgumentException( "A percentage value must be between 0 a..

Kotlin 2023.12.28

[kotlin] 이터레이션 기초: while, for 루프

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. while 루프 코틀린에는 자바와 같은 문법의 `while` 과 `do-while` 루프가 있다. while (조건) { // 조건이 참인 동안 본문을 반복 실행 /* ... */ } do { /* ... */ } while (조건) // 맨 처음에 무조건 본문을 한 번 실행, 그 후 조건이 참인 동안 본문을 반복 실행 수에 대한 iteration: range(범위), progression(수열) 자바에서는 `for` 루프를 아래처럼 사용한다. `for (어떤 변수 i 를 초기화하는 식; 각 루프 후 조건 검사 ;변수 i를 루프를 한번 실행할 때마다 갱신)` 코틀린에서는 `for` 루프를 ..

Kotlin 2023.12.27

[Kotlin] enum & when & smart cast(스마트 캐스트)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. enum 클래스 `enum` 은 soft keyword 라고 한다. `class` 앞에 붙을 때는 특별한 의미를 가지지만, 그렇지 않을 경우에는 일반 이름으로 사용이 가능하다. 반면에 `class` 는 그냥 keyword 이다. 그래서 클래스를 표현하는 변수 등을 정의할 때는 이름을 `class` 로 하지 못한다. 보통 `clazz` 또는 `mClass` 라고 정의한다. enum class Color( val r: Int, val g: Int, val b: Int // 상수의 프로퍼티를 정의 ) { RED(255, 0, 0), // 각 상수를 생성할 때 그에 대한 프로퍼티 값을 지정 ORA..

Kotlin 2023.12.27

[Kotlin] 클래스와 프로퍼티 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이번에는 클래스를 선언하는 기본 문법, 그리고 프로퍼티를 다룬다. JavaBean 클래스를 코틀린 코드로 보기 먼저 간단한 `JavaBean` 클래스 `Person` 을 봅시다. public class Person { private final String name; public Person(String name) { this.name = name; // 필드가 늘어날 수록 생성자 바디에 비슷한 코드가 반복적으로 들어간다. } public String getName() { return name; } } `Person` 클래스는 필드를 오직 `String` 타입의 `name` 만을 가진다. 만..

Kotlin 2023.12.27

[Kotlin] 함수와 변수 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 간단한 Hello, World! 살펴보기 fun main(args: Array) { println("Hello, World!") } 매우 간단한 코드이다. 이 코드만으로도, 자바와 다른 코틀린 문법과 특성을 찾을 수 있다. `fun` 키워드를 사용하여 함수를 선언한다. 파라미터 이름 뒤에 그 파라미터의 타입을 쓴다. 함수를 최상위 수준에 정의할 수 있다. 자바와 달리 꼭 클래스 안에 함수를 넣을 필요가 없다. 배열도 일반적인 클래스와 똑같이 취급한다.(`Array`의 형태로) 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않는다. 자바의 `System.out.println` 대신, `..

Kotlin 2023.12.02

[코틀린] 그래서 코루틴이 뭔데?

코틀린을 이용해서 안드로이드 앱 개발을 하다 보면 비동기 프로그래밍을 위해서 코루틴을 흔하게 사용하게 됩니다. 또 코틀린으로 스프링 프레임워크를 이용해서 서버를 구축할 때도 코루틴을 자주 사용하게 되지요. 그런데 코루틴에 대해 정말로 자세히 알고 있는 사람은 많지 않습니다. 코루틴은 간단하게 사용할 수 있지만 깊고 자세하게 알고 있는 사람은 잘 없는데, 그만큼 코루틴을 쉽게 사용할 수 있도록 잘 만들었다는 것이겠죠? 아무튼 코루틴에 대해 자세히 알아보겠습니다. 코루틴(Coroutine) 코루틴은 일단 비동기 프로그래밍 및 동시성 작업을 효율적으로 다룰 수 있는 기능을 제공하는 라이브러리와 언어 기능입니다. 사실 코루틴은 코틀린에 종속적인 기술은 아니고 C#, JS, Python, Go 같은 언어에서도 지..

Kotlin 2023.10.04