kotlin

Kotlin 시작하기

du.study 2020. 5. 29. 00:15
728x90

이 글은 코틀린을 전~~~혀 모르는 개발자가 공식홈페이지를 보며 따라해보며 배워가는 글 입니다.

해당 글은 https://kotlinlang.org/docs/reference/basic-syntax.html에서 보면서 처음부터 따라해보는것을 목표로 합니다.

 

 

언어를 새로 돌려볼땐 국룰 Hello World를 찍어보려합니다. 우선https://kotlinlang.org/docs/tutorials/getting-started.html 해당 공식 페이지의 문서대로 설정하였습니다. (너무 잘나와있기에..)

fun main() {
    println("Hello world")
}

계속 자바를 메인으로 써서 그런진 모르겟지만,  별도 클레스 선언없이 바로 메인을 실행하는건 조금 어색합니다.

 

뜬금없지만 코틀린을 갑자기 살펴보게 된 이유는, 먼저 개인적인 클라이언트 공부를 위하여! 그리고 java로 개발된 서버프로젝트를 개선할 수 있을까를 찾던 도중 여러 레퍼런스를 보면서 괜찮은 예시가 많아 한번 배워보려 합니다.

 

얼마 보지않았지만 조금 눈에띄는 특징이 있다면 

1. Optional 강제화 ( Null Safety)

코틀린에서는 변수 선언시 반드시 값에 대해 추가를 해야합니다. 물론 null을 넣을 수 있지만 null이 가능한 경우, 반드시 null 체크가 되도록 강제화 되고 있습니다. ( Runtime에서 nullpointException 가 아닌 컴파일 타임에 잡아줍니다.

fun parseInt(str: String): Int? {
    return str.toIntOrNull()
}

fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)
    
    // ...
    if (x == null) {
        println("Wrong number format in arg1: '$arg1'")
        return
    }
    if (y == null) {
        println("Wrong number format in arg2: '$arg2'")
        return
    }

    // x and y are automatically cast to non-nullable after null check
    println(x * y)
}

 

2. Java Type 호환

https://kotlinlang.org/docs/reference/java-interop.html

공식 페이지에 기존 자바 코드와 100% 호환 이라고 있었던 만큼, java에서 지원하는 타입을 그대로 지원해줍니다.

단 코틀린에서는 단일 타입으로 자바의  non-primitive, primitive를 구분하지 않고 받게됩니다.

물론 내부선언에 따라 타입을 유추하여 타입을 정하게 됩니다. 

ex)

  var a0 = 30 -> kotlin : Int, java : int

  var a1 : Int? = 50 Kotlin : Int? , java : java.lang.Integer

 

Intellij에선 Tool -> Kotlin -> Show Kotlin ByteCode를 보면 어떻게 변환되었는지 확인할 수 있습니다.

기존 자바코드와 쓰임도 비슷하고, 언어끼리 혼용하여 사용할 수도 있서 꽤 좋은 시도가 될 것 같앗습니다.

 

 

3. 코드의 간소화

해당 내용으로 작성할 내용은 매우 많지만 홈페이지에서 본 몇가지 예시를 본다면..

https://kotlinlang.org/docs/reference/returns.html1.

 

1). labels

fun main() {
    loop@ for (i in 1..100) {
        for (j in 1..100) {
            if( j == 3) break@loop
            println("$i ,$j")
        }
    }
}

만약 2중 루프가 아니라 다중 루프일때... 만약 최하위 루프에서 break를 통해 모든 for문을 끝내려면 각 for문의 마지막마다 해당 체크값을 추가해야하는 불상사가 생깁니다.( 그렇게 짜는일이 없기를 바라지만)

 

kotlin에서는 label 기능을 이용해서 최상위 loop로 jumps 하여 구문을 종료시킵니다.

 

2). Smart Cast

if (x !is String) return
print(x.length) // x is automatically cast to String

다른 언어에서도 사용중이긴 하지만, 캐스팅 부분이 간소화 되었고, 사용성이 편리해진것 같습니다. 

 

3) data 타입 간소화

java 였다면 기본적으로 getter, setter 등 여러 메스드를 선언하고 dto객체, domain객체등을 생성할 것입니다.

kotlin은 매우 간단하게 해당 부분에 대한 코드를 줄여 사용 가능한것으로 보입니다.

data class Host{
    val name : String,
    val pwd : Int
}

 

이건 추후에 좀더 자세히..

기존 프로젝트, 레거시 프로젝트를 보면서 드는 생각으로 간단한 기능이지만 너무 길고, 그 가독성 안좋게 구현되어있는 코드들을 많이 보고 있습니다.

 

물론 자바언어만으로도 충분히 개선할 수 있고, 개선해 나가고 있지만, kotlin을 공부하면서 한번씩 프로젝트의 부분부분을 기웃거리면서 한번 비교해보려합니다.

 

-- 공부를 위해 책을 사야겠습니다.

728x90