본문 바로가기
프로그래밍/Kotlin

코틀린이란

by Daniel.kwak 2019. 7. 23.

코틀린 vs 자바

  • 간결한 문법

    • 세미콜론을 넣지 않아도 된다.

    • 객체를 생성할 때 new 키워들르 사용하지 않는다.

    • 타입 추론을 지원하므로 일반적인 경우 타입을 명시하지 않아도 된다.

      //타입을 항상 명시해 주어야 한다.
      String name = "KnowRe";
      //객체 생성 시 new키워드를 사용합니다.
      Person person = new Person(name);
      //타입을 적지 않아도 타입 추론을 통해 String 타입으로 지정합니다.
      val name = "KnowRe"
      //객체 생성 시 new 키워드를 사용하지 않는다!
      val person = Person(name)
  • 널 안정성(Null Safety)

    • 자바에서는 객체가 null을 허용하는지의 여부를 따로 구분하지 않는다.

    • 코틀린에서는 컴파일 단계에서 객체의 null 허용 여부를 구분하므로 런타임 오류를 줄일 수 있다.

      //널 값을 허용하는 문자열 타입(String)
      val foo: String? = null 
      //널 값을 허용하지 않는 문자열 타입(String)
      val bar: String = "bar"
  • 가변/불변 구분

    • 코틀린에서는 변수, 변수 내 할당된 값의 불변 여부를 구분할 수 있다.

    • 최초 생성 시 할당된 값을 이후에도 변경할 수 없다면 val

    • 최초 생성 후, 값을 변경할 수 있드면 var

      //자바의 final String foo = "foo"; 와 동일합니다.
      val foo: String = "foo"
      //아래 코드는 컴파일 에러가 발생한다.
      foo = "foo"
      
      //자바의 String bar = "Bar"; 와 동일
      var bar: String = "bar"
      //컴파일 성공
      bar = "bar"    
    • 변수와 마찬가지로 컬렌션 자료형에 대해서도 가변/불변 여부를 구분한다.

    • 자료의 가변/불변 여부는 인터페이스로 구분하며, 불변 인터페이스의 경우 삽입/삭제/수정과 같은 함수가 없다.

      //자료를 변경할 수 없는 리스트 생성
      val immutable: List<String> = listOf("foo", "bar" , "baz");
      //컴파일 에러. add()함수가 정의되어 있지 않다.
      immutable.add("test")
      
      //자료를 변경할 수 있는 리스트 생성
      var mutable: MutableList<String> = mutableListOf("foo" , "bar");
      //MutableList에는 자료를 수정할 수 있는 함수가 정의되어 있다.
      mutable.add("test")
  • 람다 표현식 지원

    • 기존에는 안드로이드 개발 환경의 제약으로 람다 표현식을 사용하기 어려웠음.
    • 코틀린에서는 람다 표현식을 기본으로 지원하므로 특별한 제약없이 코드를 간소화 할 수 있다.
  • 스트림 API 지원

    • 자바8은 컬렉션 내 자료를 다루는 데 유용한 스트림API를 제공하지만 안드로이드 6.0 이상을 사용하는 플랫폼에서만 이 API를 사용할 수 있었다.
    • 코틀린 표준 라이브러리를 통해 제공하며 안드로이드 플랫폼 버젼과 상관없이 사용할 수 있어서 유용하다.
    val items = listOf(10,2,3,5,6)
    //리스트 내 항목 중 짝수의 합을 구한다.
    val sumOfEvens = items.filter{it%2 == 0}.sum()
  • 완벽한 자바 호환성

    • 자바에서 코틀린을 사용하는것도 가능, 코틀린에서 자바를 사용하는것도 모두 가능하다.