코틀린 정리 (1)

0. Kotlin의 특징

간결성

1
2
3
4
5
// @Data 어노테이션(Lombok)을 사용하지않고도 data class를 통해 같은 기능을 한다.
data class Customer(val name: String, val email: String, val company: String)

// 객체지향과 함수지향 프로그래밍 둘다 추구하며 lambda 식 사용가능
val positiveNumbers = list.filter { it > 0 }
  • Kotlin은 코드의 간결함과 개발자가 이해하기쉬운 코드를 작성하는 것을 추구한다.

안정성

1
2
3
4
5
6
7
8
9
10
11
12
13

// null 못넣음;;
var output: String
output = null // Compilation error

// nullable type이라는 것이 존재한다. 하지만 NPE를 유발하는 코드가 있으면 컴파일 에러
val name: String? = null // Nullable type
println(name.length()) // Compilation error

// value의 타입체크와 캐스팅이 동시에 일어난다.
if (value is String) {
println(value.toUpperCase())
}
  • NullPointerException에 발생할 여지가 있다면 컴파일이 불가.
  • 타입체크와 캐스팅이 동시에 일어나게하는 is라는 키워드로 ClassCastException를 좀더 쉽게 막을 수 있다.
  • Java와 같은 정적언어이지만 강력한 타입추론을 통해 타입을 명시하지않아도된다.(val)

상호운용

  • Java를 대체하기위해 나온 언어이며, JVM 위에서 구동하기 때문에 JVM 기존 라이브러리 모두 호환
  • Java -> Kotlin으로 변환가능.(갓텔리제이)

1.함수

1
2
3
fun main(args: Array<String>) {
println("Hello, World!");
}
  • fun 이라는 키워드로 함수를 작성한다.
  • args: Array<String>처럼 타입이 뒤에 들어간다. 제네릭은 Java와 동일.
  • Java와 달리 System.out.println -> println으로 축약된 Wrapper를 제공한다. (Java의 표준라이브러리를 더욱 간결하게 사용하기 위함인듯..)
1
2
3
4
5
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}

fun expressionMax(a: Int, b: Int) = if(a > b) a else b
  • Kotlin에서 if ~ else 문은 expression이므로 다음과 같이 변형가능하며 타입 추론으로 return 타입을 명시하지 않을 수 있다.

2.변수

1
2
3
4
5
6
7
8
9
10
// immutable(final)
val a = 1

// mutable
var b = 2
b = 3

// type inference
val c: Int
c = 1
  • val, var가 존재하며 val은 불변타입변수이며 final과 같고, var는 가변타입변수이다.
  • 초기화시 값을 할당하지않으려면 반드시 타입을 명시해야하며, 변수도 타입추론이 가능하다.
1
2
3
4
5
6
7
8
// 문자열 템플릿
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"

println("Hello, $name!")

println("Hello, ${if (args.size > 0) args[0] else "Kotlin"}!!")
}
  • $를 사용해서 print가 용이하다.
  • 단순 변수가 아닌 함수호출이 필요하다면 ${}을 통해 사용가능하다.

3. 클래스

1
2
3
4
5
6
7
8
9
10
11
class Car {
val name: String
var isAvailable: Boolean
}

fun main(args: Array<String>) {
val car = Car("Porsche", false)

println(car.name)
println(car.isAvailable)
}
  • 클래스 내부의 변수선언을 자바에서는 필드선언이라고 하지만 Kotlin에서는 Property 선언을 의미한다.
  • 접근제한자를 명시하지않으면 기본적으로 public이다.
  • private, protected, internal, public으로 나뉜다. internal이 새로운 키워드인데 이것은 같은모듈에서 사용가능하게하는 접근제한자이다.
0%