클래스

다음 내용을 정리한다.

  • 클래스 계층을 정의하는 방식
  • 상속 제어 변경자
  • 가시성 변경자
  • sealed 변경자

인터페이스

간단한 인터페이스를 정의해보자.

1
2
3
interface Clickable {
fun click()
}

위 간단한 인터페이스를 구현해보자.

1
2
3
class Button : Clickable {
override fun click() = println("Button was clicked")
}

extends 와 implements 키워드를 사용하는 Java 와 다르다.
클래스 이름 뒤에 콜론을 붙여서 클래스 확장과 인터페이스 구현을 모두 처리한다.

인터페이스 메서드도 디폴트 구현을 제공할 수 있다.
자바처럼 default 키워드를 붙일 필요는 없다.

1
2
3
4
interface Clickable {
fun click()
fun showOff() = println("I am clickable") // 디폴트 구현이 있는 메서드
}
Read more

함수 정의와 호출

다음 내용들을 정리한다.

  • 코틀린의 컬렉션
  • 함수 정의와 호출
  • 확장 함수와 확장 프로퍼티
  • 컬렉션 처리: 가변 길이 인자, 중위 함수 호출, 구조 분해 선언
  • 로컬 함수

컬렉션

코틀린에서의 자체 컬렉션 기능은 없다.
자바의 컬렉션을 사용한다.

1
2
3
4
5
6
7
val set = hashSetOf(1, 2, 3)
val list = arrayListOf(1, 2, 3)
val map = hashMapOf(1 to "one", 2 to "two", 3 to "three ")

println(set.javaClass) // java 의 getClass() 와 동일
println(list.javaClass)
println(map.javaClass)

출력 결과는 다음과 같다.

1
2
3
class java.util.HashSet
class java.util.ArrayList
class java.util.HashMap

함수 구현

collection 의 원소에 prefix, postfix 를 붙이고 separator 로 구분짓는 메서드를 만들자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
fun <T> joinToString(
collection: Collection<T>,
separator: String,
prefix: String,
postfix: String
): String {
val result = StringBuilder(prefix)
for ((index, element) in collection.withIndex()) {
if (index > 0) result.append(separator)
result.append(element)
}

result.append(postfix)
return result.toString()
}

// use case
val list = listOf(1, 2, 3)
println(joinToString(list, "; ", "(", ")"))
Read more

코틀린 기초

코틀린의 기초적인 내용들을 정리한다.

  • 함수, 변수
  • 클래스, 프로퍼티
  • enum, when
  • iteration
  • 예외처리

함수

두 값 중 큰 값을 반환하는, max 함수를 작성해보자.

1
2
3
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}

위 함수 처럼, 본문이 중괄호로 둘러싸안 함수를 “블록이 본문인 함수” 라고 한다.

1
fun max(a: Int, b: Int): Int = if (a > b) a else b

위 함수 처럼, 본문이 등호와 식으로 이루어진 함수를 “식이 본문인 함수” 라고 한다.
“식이 본문인 함수” 는 반환 타입을 작성하지 않아도 컴파일러가 식의 결과 타입을 반환 타입으로 지정한다.
이렇게 컴파일리거 타입을 분석해 프로그램 구성 요소의 타입을 지정하는 기능을 타입 추론이라고 한다.

그래서, 위 함수를 아래 처럼 수정할 수 있다.

1
fun max(a: Int, b: Int) = if (a > b) a else b
Read more