프로그래밍 언어/Kotlin

[Kotlin] 코틀린 공식홈페이지 기본 문법 정리(Getting Started)

코딩하는흑구 2020. 6. 15. 22:36

이번에는 코틀린의 공식홈페이지에 있는 Getting Started에 정리된 내용을 제가 이해한대로 정리해보았습니다.

 

코틀린 공식홈페이지 Getting Started 주소는 아래와 같습니다.

https://kotlinlang.org/docs/reference/basic-syntax.html

 

Basic Syntax - Kotlin Programming Language

 

kotlinlang.org

일단, 모든 내용을 테스트할 수 있는 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)
}