OSS로 공부 :: Kotlin - Function literals with receiver

똑같은 코드는 이제 그만

전편에 이어 이번에도 똑같은 코드를 다시 한 번 볼 것이다.

1
2
3
4
5
6
7
8
fun bot(body: Bot.Builder.() -> Unit): Bot = Bot.Builder().build(body)

fun main(args: Array<String>) {
val bot = bot {
token = "YOUR_API_KEY"
}
bot.startPolling()
}

OSS로 공부 :: Kotlin - Trailing lambda

Kotlin-Telegram-Bot

코틀린용 텔레그램 봇 라이브러리.

Start수가 아주 높진 않아도 굉장히 잘 만들어진 라이브러리이다. 최근까지 지속적으로 업데이트를 하고 있으며 사용법도 굉장히 간단하고 쉬워서 애용한다.

Kotlin :: 클래스, 객체, 인터페이스 3

1편 : Kotlin :: 클래스, 객체, 인터페이스 1
2편 : Kotlin :: 클래스, 객체, 인터페이스 2


Data 클래스

자바에서 클래스를 생성하면 반듯이 하는 3가지 함수가 있다.

  • toString
  • equals
  • hashCode

Kotlin :: 클래스, 객체, 인터페이스 2

클래스, 객체, 인터페이스 1에 이어 클래스, 객체, 인터페이스2 를 시작한다.

클래스 선언

코틀린에서는 생성자를 주 생성자(primary constructor)부 생성자(secondary constructor)로 나눈다. 주 생성자는 단 한번만 선언할 수 있으며 부 생성자를 여럿 선언할 수도 있다.

[Kotlin] 클래스, 객체, 인터페이스 1

코틀린 인터페이스

코틀린 인터페이스는 자바8과 비슷하게 추상 메소드 뿐만 아니라 구현이 있는 메소드도 정의할 수 있다. 다만 인터페이스에는 아무런 상태(필드)도 들어갈 수 없다.

1
2
3
4
5
6
7
8
interface Clickable {
fun click()
fun showOff() = println("I'm clickable")
}

class Button : Clickable {
override fun click() = println("I' was clicked")
}
  • 콜론(:)을 붙여 클래스 확장과 인터페이스를 구현 모두를 처리한다.
  • override변경자는 @Override 애노테이션과 동일하게 오버라이드 표시를 하지만 오버라이드 시 반드시 사용해야 한다.
  • showOff와 같이 디폴트 함수를 제공한다.

함수 정의와 호출 2

함수 정의와 호출 1에 이어 함수 정의와 호출 2를 시작한다.


확장 프로퍼티

확장 프로퍼티를 사용하면 기존 클래스 객체에 대한 프로퍼티 형식의 구문으로 사용할 수 있는 API를 추가할 수 있다. 확장 프로퍼티로 작성하면 아무 상태도 가질 수 없지만 (확장 함수와 같다) 코드를 더 짧게 작성할 수 있어서 편한 경우가 있다.

1
2
val String.lastChar: Char
get() = get(length - 1)

함수 정의와 호출 1

코틀린에서 컬렉션 만들기

코틀린에서는 코틀린만의 컬렉션을 만들지 않고 모두 자바의 컬렉션은 그대로 사용하고 추가적인 함수를 제공하고 있다. 컬렉션을 만들 때엔 대체적으로 컬렉션명 + Of의 조합이다.

1
2
3
4
5
6
7
8
9
10
val set = hashSetOf(1, 7, 53)
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")

>>> println(set.javaClass)
class java.util.HashSet
>>> println(list.javaClass)
class java.util.ArrayList
>>> println(map.javaClass)
class java.util.HashMap

[Kotlin] 코틀린의 기초 2

코틀린의 기초 1에 이어 코틀린의 기초 2를 시작한다.


선택 표현과 처리: enum과 when

enum 클래스 정의

코틀린에서 enum은 소프트 키워드라 부르는 존재이다. enum은 class앞에 있을 때는 특별한 의미를 지니지만 다른 곳에서는 이름에 사용할 수 있다. 반면 class는 키워드이므로 이름으로 사용할 수 없다.

자바와 마찬가지로 enum은 단순히 값만 열거하는 존재가 아니다. enum 클래스 안에도 프로퍼티나 메소드를 정의할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
enum class Color (
val r: Int, val g: Int, val b: Int
) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VILOET(238, 130, 238);

fun rgb() = (r * 256 + g) * 256 + b
}

>>> println(Color.BLUE.rgb())
255

[Kotlin] 코틀린의 기초 1

함수

1
2
3
fun main(args: Array<String>) {
println("Hello world!")
}
  • 함수 선언은 fun 키워드를 사용한다.
  • 파라미터는 이름 → 타입 순서로 쓴다.
  • 코틀린에서 함수는 최상위 수준이다. 자바와 달리 클래스 안에 함수를 넣을 필요가 없다.

[Kotlin] 코틀린이란

코틀린

  • 자바 플랫폼에서 돌아가는 프로그래밍 언어
  • 간결하고 실용적이며, 자바 코드와의 상호운용성을 중시
  • 자바가 사용되는 곳이라면 코틀린으로 활용 가능
  • 기존의 자바 라이브러리나 프레임워크와 함께 잘 작동하며 성능도 자바와 같은 수준
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×