본문 바로가기

코틀린

코틀린 특징 및 장단점

코틀린 특징 및 장단점

1. 널안정성 - 널값 허용여부를 컴파일단계에서 검사하므로 런타임에서 발생하는 오류를 줄일수 있다. 

nonnullable 타입을 기본으로해 null참조를 제거한다. null을 넣고 싶은 변수는 그 타입을 nullable로 선언한다. nullable타입변수는 세이프 호출이 

가능하다. nullable?.dosuff() -> 세이프호출은 체인이 가능하다. 

2. 간결한 문법 - 세미콜론이 없다. new 키워드 없이 객체를 생성한다. 타입추론을 지원하므로 일반적인 타입을 적지 않는다. 

3. 가변/불변 지원 : 

    var - 할당된 값을 런타임시에 자유자재로 바꿀수 있는 변수 

    val - 값을 한번할당하고 나면 그 후에 변경할수없는 변수로 자바의 final키워드를 붙인 변수랑 동일하다. 

    const - 컴파일시의 상수란 의미로 컴파일타임에 값을 할당해야 한다는 의미

    컬렉션 자료에도 mutable을 붙인 자료형이 존재한다. mutableList

4. 람다 표현식 지원 - 자바로 작성된 인터페이스에 한해 sam(single abstract method) 변환을 지원하여 함수의 인자로 전달되는 인터페이스의 인스턴스를 

   람다로 표현할수있다. 람다표현식이란 메서드를 메서드의 이름과 반환값을 삭제하고 표현한 하나의 식으로 익명함수라고도 불린다


5. 스트림 api를 지원 - 자바8은 컬렉션내의 자료를 다루는데 유용한 스트림 api지원하지만 안드로이드 6.0이상에서만 지원되는등 제약이컸다. 

                             코틀린은 제약이 없다. 

6. 완벽한 자바 호환성

7. extension 기능 - 클래스에 상속하지 않아도 메서드를 추가할 수 있는 기능이다. 마치 클래스의 한 기능이었던것 처럼

   fun String.makepretty()

   android data extension으로 findviewbyid없이 id값으로 바로 뷰를 접근이 가능하다. 

8. 고차 함수(high order function) - 함수를 파라미터로 가져오고 함수를 리턴한다. 

9. 데이타 클래스 지원  - 데이터 기반의 클래스로 getter, setter, tostring, copy등이 지원된다. 

10. 코루틴 - 스레드처럼 비동기작업을 지원한다. 하지만 os에 의존적이지 않아 스레드보다 부하가 적다. 

11. type alias - 대안적인 이름, 별명에 타입을 붙이는 능력이다. 

     typealias MapOfLists = Map<String, List>

단점

 1. 순수 자바 패키지보다 패키지사이즈가 더 커진다. 

 2. 빌드시간이 느리다. 

 3. 자바가 코틀린을 호출할때 optional처리문제가 있다. 변수뒤에 ?가 없으면 non-null로 처리되어서 null이 오면 exception처리된다. 

 4. 함수 파라미터는 var가 아니라 val이라 짜증난다.