
2017년 Google I/O 에서 Kotlin을 Android 공식 개발 언어로 지정했습니다. 벌써 꽤 시간이 지났네요. 부끄럽지만 Kotlin의 구체적인 장점이 떠오르지 않고 Java와 비교해서 개발이 훨씬 편해졌다고만 느끼고 있더라고요.
이번 글을 쓰면서 kotlin을 왜 쓰게 되었는지. Kotlin의 장점은 무엇인지 다시 한번 생각해 보는 시간이 되었습니다
Kotlin의 장점
Kotlin의 장점은 간단히 정리하면 (자바와 비교해서) 간결한 문법과 편리한 기능입니다.
많은 글들에서 Kotlin의 장점을 Java와 비교해서 설명하고 있습니다. Android 개발자부터 시작해서 최근에는 Kotlin+Spring이 서버 개발자 사이에서 인정받기 시작했습니다. 그래서 Java와 Kotlin으로 넘어온 비중이 많아서 그런 것 같아요.
장점이 간결한 문법과 편리한 기능이기 때문에 Kotlin의 문법을 예시로 설명드릴 수 밖에 없는데요. 모든 문법을 설명드리기에는 양이 너무 많기 때문에 일부분만 소개해드리려고 합니다.
;(세미콜론) 생략
//java int a = 10;
val a = 10
귀여운 장점인데요. Kotlin은 명령어를 구분하는 ;(세미콜론)을 생략할 수 있습니다. 단, 한 줄에 2개 이상의 명령문을 사용하려면 여전히 필요합니다.
파일이 1000줄이라면 약 1000번의 타이핑을 안 하게 될 수 있네요? 🥰
Nullable Type
var a : Int = 10
a = null // a는 Nullable 타입이 아니므로 null이 들어갈 수 없다.
var b : Int? = null
Kotlin에서 null은 명시적으로 null이 허용된 타입에만 할당할 수 있습니다. 옵셔널 타입이라고 하는데요. 옵셔널 타입이 아닌 변수에 null을 할당하면, 컴파일 타임에 오류가 발생합니다.
이러한 특성은 개발자가 null을 인지하고 프로그래밍을 할 수 있다는 장점이 있습니다. 또한 null을 처리하는 여러 문법도 제공합니다.
타입 추론
var y = 5 //5 값으로 y변수 타입 추론 -> Int
fun sum(a:Int, b:Int) = a + b // Return Type 생략
Koltin도 Java와 마찬가지로 정적 타입 지정 언어로 런타임에서 변수 타입이 정해지는 것이 아닌 컴파일 타임에서 변수의 타입이 정해지는데요. 여기서 Kotlin은 추가로 코틀린 컴파일러가 값을 분석하여 타입을 유추합니다.
따라서 변수, 함수 등 문법에서 값을 유추할 수 있다면 타입을 생략할 수 있습니다.
String Template
// String.format("my name is %s", name)
val name = "점냥"
val str = "my name is ${name}"
Kotlin에서 String template 기능을 사용하면 간결하게 변수와 문자열을 조합해서 표현할 수 있습니다!
%s 처럼 String.format의 문법 수식을 외울 필요가 없어져요!
Function
Default 매개변수
//public void function(int one) { ... }
//public void function(int one, float two) { ... }
//public void function(int one, float two, int three) { ... }
fun function(one : Int = 0,
two : Float = 1.0,
three : Int = 2) { ... }
Kotlin의 디폴트 매개변수 기능을 사용하면 동일한 함수 명을 사용하면서, 필요에 따라서 매개변수를 생략해서 함수를 호출할 수 있습니다.
Name Arguments
//function 함수 호출
function(
fristArgument = 1,
thirdArgument = 3,
secondArgument = 2
)
Name Arguments 기능은 함수 호출할 때 매개변수의 순서와 상관없이 이름을 지정하여 매개변수 값을 넘길 수 있는 기능입니다. Default 매개변수로 인해 함수의 매개변수가 많아져도 Name Arguments 기능을 이용해서 명확하게 값을 전달할 수 있습니다.
확장 함수
fun String.toA() { ... }
val str = "test"
str.toA()
Kotlin의 확장 함수 기능은 수신 객체의 함수를 재정의하거나 새로 함수를 정의할 수 있습니다. 그렇다고 확장 함수 내부에서 객체의 private 변수들을 접근할 수 있다는 것은 아닙니다.
고차함수
val functionVariable = this::sample
fun sample(function2: () -> Unit): (Int) -> Unit {
return { n ->
function2()
print(n)
}
}
val lamda = { sample() }
Kotlin에서 함수는 변수에 값으로 할당이 가능합니다. 즉 일급 객체입니다.
함수의 매개변수로 함수가 들어갈 수 있으며, 반환 타입으로 함수를 반환할 수 있습니다. 이 케이스를 고차함수라고 합니다.
Class
상속 및 구현
interface Partent1 { ... }
open class Parent2 { ... }
class SubClass : Parent1, Parent2 {
...
}
Kotlin은 인터페이스의 구현, 부모 클래스의 상속하는 방법이 : 키워드로 통일됩니다.
자바와 다른 점은 Kotlin은 기본적으로 상속을 받을 수 없는 final class입니다. 상속을 열어주려면 open 키워드를 사용해야 합니다.
Data class
/**
public class sample {
private int a;
public sample(int a) { this.a = a; }
public int getA() { return a; }
public void setA(int a) { this.a = a; }
@Override
public String toString() { return "" + a; }
@Override
public boolean eqauls(Object obj) { ... }
@Override
public int hashCode() { ... }
}
*/
data class sample(val a: Int)
Kotlin의 Data class는 데이터 관리/비교에 필요한 코드들을 자동으로 생성됩니다.
Java에서 Data 비교를 위한 클래스를 작성할 때 Getter, Setter 함수 등의 함수를 매번 작성해야 합니다.
최근 Java에서도 record class 키워드로 클래스를 선언하면 자동적으로 생성해 준다고 하네요.
'Language > kotlin' 카테고리의 다른 글
[Kotlin] Enum의 새로운 values Function 등장, entries (0) | 2024.05.05 |
---|---|
[Kotlin] 데이터 표현을 위한 Data Object (0) | 2024.03.26 |
[Kotlin] Singleton (0) | 2020.06.01 |

2017년 Google I/O 에서 Kotlin을 Android 공식 개발 언어로 지정했습니다. 벌써 꽤 시간이 지났네요. 부끄럽지만 Kotlin의 구체적인 장점이 떠오르지 않고 Java와 비교해서 개발이 훨씬 편해졌다고만 느끼고 있더라고요.
이번 글을 쓰면서 kotlin을 왜 쓰게 되었는지. Kotlin의 장점은 무엇인지 다시 한번 생각해 보는 시간이 되었습니다
Kotlin의 장점
Kotlin의 장점은 간단히 정리하면 (자바와 비교해서) 간결한 문법과 편리한 기능입니다.
많은 글들에서 Kotlin의 장점을 Java와 비교해서 설명하고 있습니다. Android 개발자부터 시작해서 최근에는 Kotlin+Spring이 서버 개발자 사이에서 인정받기 시작했습니다. 그래서 Java와 Kotlin으로 넘어온 비중이 많아서 그런 것 같아요.
장점이 간결한 문법과 편리한 기능이기 때문에 Kotlin의 문법을 예시로 설명드릴 수 밖에 없는데요. 모든 문법을 설명드리기에는 양이 너무 많기 때문에 일부분만 소개해드리려고 합니다.
;(세미콜론) 생략
//java int a = 10;
val a = 10
귀여운 장점인데요. Kotlin은 명령어를 구분하는 ;(세미콜론)을 생략할 수 있습니다. 단, 한 줄에 2개 이상의 명령문을 사용하려면 여전히 필요합니다.
파일이 1000줄이라면 약 1000번의 타이핑을 안 하게 될 수 있네요? 🥰
Nullable Type
var a : Int = 10
a = null // a는 Nullable 타입이 아니므로 null이 들어갈 수 없다.
var b : Int? = null
Kotlin에서 null은 명시적으로 null이 허용된 타입에만 할당할 수 있습니다. 옵셔널 타입이라고 하는데요. 옵셔널 타입이 아닌 변수에 null을 할당하면, 컴파일 타임에 오류가 발생합니다.
이러한 특성은 개발자가 null을 인지하고 프로그래밍을 할 수 있다는 장점이 있습니다. 또한 null을 처리하는 여러 문법도 제공합니다.
타입 추론
var y = 5 //5 값으로 y변수 타입 추론 -> Int
fun sum(a:Int, b:Int) = a + b // Return Type 생략
Koltin도 Java와 마찬가지로 정적 타입 지정 언어로 런타임에서 변수 타입이 정해지는 것이 아닌 컴파일 타임에서 변수의 타입이 정해지는데요. 여기서 Kotlin은 추가로 코틀린 컴파일러가 값을 분석하여 타입을 유추합니다.
따라서 변수, 함수 등 문법에서 값을 유추할 수 있다면 타입을 생략할 수 있습니다.
String Template
// String.format("my name is %s", name)
val name = "점냥"
val str = "my name is ${name}"
Kotlin에서 String template 기능을 사용하면 간결하게 변수와 문자열을 조합해서 표현할 수 있습니다!
%s 처럼 String.format의 문법 수식을 외울 필요가 없어져요!
Function
Default 매개변수
//public void function(int one) { ... }
//public void function(int one, float two) { ... }
//public void function(int one, float two, int three) { ... }
fun function(one : Int = 0,
two : Float = 1.0,
three : Int = 2) { ... }
Kotlin의 디폴트 매개변수 기능을 사용하면 동일한 함수 명을 사용하면서, 필요에 따라서 매개변수를 생략해서 함수를 호출할 수 있습니다.
Name Arguments
//function 함수 호출
function(
fristArgument = 1,
thirdArgument = 3,
secondArgument = 2
)
Name Arguments 기능은 함수 호출할 때 매개변수의 순서와 상관없이 이름을 지정하여 매개변수 값을 넘길 수 있는 기능입니다. Default 매개변수로 인해 함수의 매개변수가 많아져도 Name Arguments 기능을 이용해서 명확하게 값을 전달할 수 있습니다.
확장 함수
fun String.toA() { ... }
val str = "test"
str.toA()
Kotlin의 확장 함수 기능은 수신 객체의 함수를 재정의하거나 새로 함수를 정의할 수 있습니다. 그렇다고 확장 함수 내부에서 객체의 private 변수들을 접근할 수 있다는 것은 아닙니다.
고차함수
val functionVariable = this::sample
fun sample(function2: () -> Unit): (Int) -> Unit {
return { n ->
function2()
print(n)
}
}
val lamda = { sample() }
Kotlin에서 함수는 변수에 값으로 할당이 가능합니다. 즉 일급 객체입니다.
함수의 매개변수로 함수가 들어갈 수 있으며, 반환 타입으로 함수를 반환할 수 있습니다. 이 케이스를 고차함수라고 합니다.
Class
상속 및 구현
interface Partent1 { ... }
open class Parent2 { ... }
class SubClass : Parent1, Parent2 {
...
}
Kotlin은 인터페이스의 구현, 부모 클래스의 상속하는 방법이 : 키워드로 통일됩니다.
자바와 다른 점은 Kotlin은 기본적으로 상속을 받을 수 없는 final class입니다. 상속을 열어주려면 open 키워드를 사용해야 합니다.
Data class
/**
public class sample {
private int a;
public sample(int a) { this.a = a; }
public int getA() { return a; }
public void setA(int a) { this.a = a; }
@Override
public String toString() { return "" + a; }
@Override
public boolean eqauls(Object obj) { ... }
@Override
public int hashCode() { ... }
}
*/
data class sample(val a: Int)
Kotlin의 Data class는 데이터 관리/비교에 필요한 코드들을 자동으로 생성됩니다.
Java에서 Data 비교를 위한 클래스를 작성할 때 Getter, Setter 함수 등의 함수를 매번 작성해야 합니다.
최근 Java에서도 record class 키워드로 클래스를 선언하면 자동적으로 생성해 준다고 하네요.
'Language > kotlin' 카테고리의 다른 글
[Kotlin] Enum의 새로운 values Function 등장, entries (0) | 2024.05.05 |
---|---|
[Kotlin] 데이터 표현을 위한 Data Object (0) | 2024.03.26 |
[Kotlin] Singleton (0) | 2020.06.01 |