코틀린

자바와 코틀린의 차이를 알아보자

레알윙 2021. 7. 25. 18:09
반응형

코틀린이 무엇인가?

이제 작성한 내용은 위의 작성한글 중 코틀린의 특징과 비슷한점이 많다. 하지만 이번에는 직접 코드를 작성하면서 설명하기 때문에 더 이해하기 쉬울 것이다.

 

자바와 코틀린의 차이

더적은 타이핑

세미콜론 생략가능

fun test() {
    print("hello world")
    print(6 * 2)
}

변수타입을 지정 생략 가능

fun testVariable(){
    val greet = "hello";
    println(greet);
    println(greet::class)
    println(greet.javaClass)
}

 

결과

위의 클래스를보게된다면 코틀린의 Stringclass, JavaClass를 가져다가 사용할 수있다. 그 이유는 컴파일 시간에 타입을 체크하기 때문이다.

클래스와 함수는 생략 가능

코틀린은 클래스와 메소드를 만들라고 강요하지 않는다. 그 이유는 아래코드의 실행결과를 보게된다면 자동으로 클래스로 감싸주기 때문이다. 더나아가 풀어쓴다면 코틀린은 nofluff() 함수를 Standalone이라는 동기화된 클래스의 메소드 안으로 넣었으며, 클래스의 이름은 파일 이름으로 추론된다. 그리고 출력 결과에 나온 init을 봤을 대 단독적으로 동작하는 코드는 클래스의 생성자 안으로 들어갔다.

try ~ catch는 선택사항

java의 Thread 클래스의 sleep() 해당 예외를 반드시 처리하도록 강제하지만 코틀린은 강제하지 않는다.

/**
 * 코틀린은 try ~ catch(예외처리)는 선택사항이다.
 */
fun skipException() {
    println("시작")
    Thread.sleep(1000)
    println("끝")
}

 

현명한 경고

아래의 코드를 실행시키게된다면 console에는 사용하지 않는 파라미터에 대한 경고를 함께 준다. 

하지만 -Werror옵션으로 경고를 오류처럼 다를 수 있다. 아래의 커맨드라인으로 실행시키게 된다면 위에 실행했던거와 다르게 오류 리포트가 나오게 된다.

kotlinc-jvm -Werror -script chapter2_step4.kts

 

var 보다는 val

코드를 작성하게 된다면 이뮤터블과 뮤터블이란 이야기가 나올 것이다. 

이뮤터블은 상태를 바꿀 수 없는 상태, 자바로 치면 final이 붙은 것이며,

뮤터블은 상태를 바꿀 수 있는 상태를 뜻한다.

var factor = 2
fun doubleIt(n: Int) = n * factor
factor = 0
println(doubleIt(2))

위의 코드를 실행시키게 된다면 var(뮤터블)로 선언했기 때문에 값이 변한다. 이렇게 된 코드는 코드를 추론하기 어렵게 만들다. 게다가 이러한 코드는 오류가 발생할 가능성이 높으며, 뮤터블 변수가 있는 코드는 병렬화하기가 더 어렵다.

이뮤터블의 예제

 

향상된 동일성 체크

아래의 비교가 Java의 equals()로 실행되었다면 런타임에서 NullPointException 이란 결과가 발생이 된다. 그렇지만 코틀린은 이러한 에러를 발생하지 않는다. 그 이유는 코틀린은 == 연산자를 사용할 때, null 체크를 먼저하고, equlas()메소드를 실행하기 때문이다.

 

문자열 템플릿

큰따음표 문자열에서 $ 심볼을 변수 앞에  붙여주면 어떤 변수라도 문자열 안에 들어간다.

 

Raw 문자열

이스케이프 사용 하지 않는다.
멀티라인 문자열

 

표현식은 많이, 명령문은 적게

 


정리

  • 프로그래밍 작업에서 사용되는 관용적인 코드를 없애고, java보다 더 적은 코드로 작업 가능
  • 오류로부터 경고를 해준다.
  • 변수의 이뮤터빌리티와 뮤터빌리티를 미리 선택하기 때문에 프로그램의 안정성이 올라간다.
  • 비교를 할때 null 오류가 발생되지 않는다.
반응형