July 02, 2000
val array = listOf(1, 2, 3)
직역하면 변할 수 있는, 변할 수 없는 이라는 뜻입니다.
Kotlin에서 변수를 선언할 때 var, val 형으로 선언하곤 합니다.
val로 지정된 변수는 immutable하며 초기화만 가능합니다.
var로 지정된 변수는 mutable하며 값을 바꿀 수 있습니다.
또한, Collection 함수는 대체로 immutable하며 가변적으로 만들고 싶다면 mutable한 collection 함수로 선언해야 합니다.
var array = mutableListOf(1, 2, 3)
배열을 선언했다면 모든 원소를 탐색할 수 있어야 합니다.
Kotlin은 함수형 프로그래밍을 좋아하기 때문에 Collection 함의 원소를 탐색하는 여러 함수가 존재하지만,
반복문을 사용해도 첫 원소부터 마지막 원소까지 훑을 수 있습니다.
저는 코딩테스트를 연습하며 Python 언어에 익숙했고, Kotlin에서의 for문은 생소했습니다.
Kotlin에서의 for문은 in을 주로 사용합니다.
// i는 0부터 array의 size까지
for (i in 0 until array.size){
println(array[i])
}
for (i in array.indices){
println(array[i])
}
배열을 순회하는 목적 중 하나는 원하는 원소를 찾고 싶을 때 입니다.
제어문을 사용하면 원하는 조건에 부합할 때만 작동하는 명령을 만들 수 있습니다.
Kotlin의 제어문에는 대표적으로 if문과 when문이 있습니다.
if문을 여러개 사용할 때 간단하게 when 문으로 대체할 수 있습니다.
if (a == 1) print(1)
else if(a == 2) print(3)
else if(a == 3) print(8)
when{
a == 1 -> print(1)
a == 2 -> print(3)
a == 3 -> print(8)
}
“제네릭 프로그래밍은 데이터 형식에 의존하지 않고 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍이다.” -https://ko.wikipedia.org/wiki/제네릭_프로그래밍
코틀린에서는 Int를 매개변수로 받는 함수가 있으면
그 함수에 String을 넘겨줄 때 오류가 발생합니다.
일반 자료형은 toInt()와 toString()과 같은 함수를 사용해 타입 캐스팅을 해주면 되지만,
배열의 자료형을 변경하려면 모든 원소에 함수를 사용해줘야 하며, List로 선언된 배열에 string을 넣어줄 수 없어 새 배열을 만들어야 합니다.
함수를 선언할 때 fun 바로 뒤에 <T: Comparable>를 붙여주고
자료형에 T를 사용합니다.
fun <T: Comparable<T>>walk(leg: List<T>){
print(leg)
}
따로 자료형을 지정해주지 않아도 되는 편리함을 가졌지만,
코드를 볼 때 자료형을 확인할 수 없고 복잡하다는 단점도 생각하면서 써야겠습니다.