목록으로
Kotlin

Kotlin 문법

Dev Park
4/11/2024
30 views

서론

이제 앞서서하던 Java를 이용한 Springboot 프로젝트가 마무리되면서 다음 프로젝트로는 Kotlin을 사용한 프로젝트를 계획하게 되었다.
해당 프로젝트에 들어가기 앞서 Kotlin 문법에 대해서 공부하고자 이 포스팅을 작성하게 되었다.

변수

변수 선언은 Java 보다는 Javascript에 가깝다고 느꼈다.

var: 변수값이 변경 가능한 변수 선언 (Javascript의 var,let)
val: 선언시에만 초기화 가능 (Javascript의 const, Java의 final)

Kotlin
1fun main() { 2 var a: Int 3 a = 123 4 print(a) // 123 5 6 a = 234 7 print(a) // 234 8 9 val b:Int = 1232 10 print(b) // 1232 11 12 b = 3 // 에러 발생 13 print(b) 14}

변수를 선언할 떄 변수이름 옆에 :(타입) 을 입력해줘야한다.
그리고 타입 옆에 ?를 붙여주면서 nullable을 나타낼 수 있다.

Kotlin
1fun main() { 2 var a:Int? = null 3 print(a) //null 4}

형변환

형 변환은 Java와 크게 다르지 않다.
to변수타입() 을 통해 형변환이 가능하다.

Kotlin
1fun main() { 2 var a:Int = 123 3 var b:String = a.toString; 4}

참고로 코틀린은 암시적 형변환을 지원하지 않는다.

배열

Kotlin
1fun main() { 2 var intArr:Array<Int> = arrayOf(1,2,3,4) // Int형으로 배열 생성 3 var intArr2 = arrayOfNulls<Int>(5) // Type선언 생략가능, Nullable 4 var anyArr : Array<Any> = arrayOf(1,"a",3.2) // Any타입을 통해 어느 데이터든 들어갈 수 있음 5 6 print(intArr[0]) // 1 7 print(intArr2[0]) // null 8 print(anyArr[1]) // a 9}

함수

함수 선언은 fun (함수이름) 으로 적는다.
그 다음 괄호에 매개변수를 적고 매개변수 타입을 선언해준다.
그리고 매개변수 뒤에 반환될 타입을 선언해준다.

Kotlin
1fun main() { 2 print(add(1,2,3)) // 6 3} 4 5fun add(a:Int, b:Int, c:Int): Int { 6 return a+b+c; 7}

위와 같은 함수는 아래와 같이 단일 표현식으로도 적을 수 있다.

Kotlin
1fun add(a: Int, b: Int, c: Int) = a + b + c // Int타입만을 더하기때문에 Int타입으로 추론가능

조건문

기본적으로 다른 언어들과 크게 다르지 않다.
조금 다른게 있다면 Switch문을 when으로 쓴다는 점이다.

kotlin
1when(a){ 2 1 -> print(2) 3 "awd" -> print("dwa") 4 else -> print(a) 5}

값을 할당해줄때도 다음과 같이 쓸 수 있다.

kotlin
1var b = when(a){ 2 1 -> 1 3 "awd" -> "dwa" 4 else -> a 5}

반복문

반복문 또한 다른 언어와 크게 다르지 않다.

Kotlin
1while(i < 3){ 2 println(i) 3 i++ 4} 5 6// i가 0부터 3까지 높아지며 반복 7for(i in 0..3){ 8 print(i) 9 print(" ") 10} 11 12// i가 3부터 0까지 낮아지며 반복 13for(i in 3 downTo 0){ 14 print(i) 15 print(" ") 16} 17 18// i가 0부터 5까지 2씩 높아지며 반복 19for(i in 0..5 step 2){ 20 print(i) 21 print(" ") 22} 23 24// i가 a부터 e까지 알파벳 순서로 반복 25for(i in 'a'..'e'){ 26 print(i) 27 print(" ") 28}

클래스

자바와 가장 다른점은 이 클래스 선언일 것이다.
일단 자바와 다르게 생성자를 따로 선언해주지 않아도 된다.

Kotlin
1class a(var name:String, val age:Int) { 2 fun introduce() { 3 println("$name $age") 4 } 5} 6 7fun main() { 8 var b = a("홍길동",26) 9 10 b.introduce() // 홍길동 26 11 println("${b.name}, %{b.age}) // 홍길동, 26 12}

코틀린의 클래스에는 init이라는 기능이 있는데 이는 클래스가 인스턴스로 생성될 때 발생하는 로직을 정할 수 있다.

Kotlin
1class a(var name:String, val age:Int) { 2 init{ 3 println(create : ${this.name}) 4 } 5} 6 7fun main() { 8 var b = a("홍길동",26) // create : "홍길동" 9}

상속에 대해서도 조금 다른점이 있다.
상속을 받기 위해서는 부모클래스의 메소드에 open이라는 값을 입력해줘야한다.
상속받은 메소드를 override를 붙여서 override할 수 있다.

Kotlin
1open class Person(var name:Strings, var job:String) { 2 open fun introduce() { 3 println("${this.name} ${this.job}") 4 } 5} 6 7class Artist(var name:String, var job:String) : Person(name, "예술가") { 8 override fun introduce() { 9 super.introduce() 10 } 11}