[Kotlin] 코틀린 공식홈페이지 기본 문법 정리(Getting Started)
이번에는 코틀린의 공식홈페이지에 있는 Getting Started에 정리된 내용을 제가 이해한대로 정리해보았습니다.
코틀린 공식홈페이지 Getting Started 주소는 아래와 같습니다.
https://kotlinlang.org/docs/reference/basic-syntax.html
일단, 모든 내용을 테스트할 수 있는 main 함수입니다.
fun main(){
println(sum(10, 20))
println(sum2(10, 20))
printSum(10, 20)
printSumNoUnit(10, 20)
println("1과 10중 최댓값은 ${maxOf(1,2)}입니다.");
println("1과 100중 최댓값은 ${maxf2(1,2)}입니다.");
printProduct("1", "9");
printProduct("a", "2");
printProduct("a", "b");
printProduct2("1", "9");
printProduct2("a", "4");
printProduct2("a", "b");
//string_template
string_template()
}
함수 선언방법 2가지
1. 첫번째 방법
fun sum(a: Int, b: Int): Int {
return a + b
}
- 기본적으로 모든 프로그래밍 언어에서 봐왔듯이 평범한 함수 선언식입니다.
2. 두번째 방법
fun sum2(a: Int, b: Int) = a + b
- 약간 어색한 부분이 if문 괄호 생략처럼 괄호가 사라졌고, return type 기재하는 것이 사라졌고, return 문이 사라졌습니다.
- 굉장히 심플하게 선언된 것 같네요.
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
fun printSumNoUnit(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
- 만약 아무 리턴값을 반환하지 않는다는 표현은 : Unit 으로 함수 리턴타입으로 붙일 수도 있고, 생략이 가능합니다.
변수선언
1. 즉시 대입(타입선언)
val a: Int = 1
2. 즉시대입(타입체크)
val b = 2
- 이는 우측의 대입값을 보고 Int 타입으로 참조합니다.
3. 선언 후 초기화
val c: Int
c = 3
- 다음과 같이 선언하고나서 나중에 초기화를 해야할 때가 있는데, 그럴때는 타입을 static 하게 정해놓고 사용해야한다.
문자열 템플릿
fun string_template() {
var a = 1
val s1 = "a is $a"
println(s1)
a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a" //${} 기호 안에서 메소드 접근 가능.
println(s2)
}
- 변수 a는 문자열안에서 $기호를 붙여 값을 대입하여 사용할 수 있다.
- 또한 ${} 안에서 문자열 s1는 자신의 인스턴스 메소드를 사용할 수 있다.
조건식
1. 기본 조건식
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
- 무난한 조건식이다.
2. return 생략 조건식
fun maxf2(a: Int, b: Int) = if(a > b) a else b
- 위에서 봤던 함수 대입식처럼 if문에서 반환되는 값을 return 문 없이 바로 대입할 수 있다.
- 자바 사용자로써는 좀 많이 어색한 문법이지만 익숙해져야할 것 같다.
Null값과 Null 체크
* parseInt2 함수는 str에 정수가 없다면 Null을 반환하는 함수입니다.
fun parseInt2(str: String): Int? {
val numberList = listOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
if(numberList.contains(str)){
return parseInt(str)
} else{
return null
}
}
- : Int? 를통해 Null 혹은 Int 값이 반환될 수 있음을 명시합니다.
Null 체크는 보통의 프로그래밍 언어처럼 ==/!= 연산자를 사용하여 처리할 수 있습니다.
fun printProduct(arg1: String, arg2: String) {
val x = parseInt2(arg1)
val y = parseInt2(arg2)
//
if(x != null && y != null) {
println(x * y)
} else {
println("'$arg1' or '$arg2' is not a number")
}
}
fun printProduct2(arg1: String, arg2: String) {
val x = parseInt2(arg1)
val y = parseInt2(arg2)
if(x == null) {
println("Wrong number format in arg1: '$arg1'")
return
}
if(y == null) {
println("Wrong number format in arg1: '$arg2'")
return
}
println(x * y)
}