ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 코틀린 소개
    Kotlin 2019. 3. 17. 21:08

    코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생상적이며 안전한 대체 어너를 제공하는 것이다.
    또한 자바뿐 아니라 자바스크립트로 코틀린을 컴파일 할 수 있다. 즉 브라우저나 노드에서 실행할수도 있다는 말이다.

     

     

    Kotlin은 정적타입 지정언어 이지만 모든 변수의 타입을 직접 명시할 필요가 없다?

    Kotilin은 정작타입 언어 이기 때문에 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 Field나 Method를 사용할 때마다 컴파일러가 타입을 검증해준다.

    반대로 그루비, JRuby가 동적 타입 지정 언어인데 컴파일단계가 아닌 실행시점에 Method, Field접근에 대한 검증이 일어나 코드가 짧고 구데이터 구조가 유연하다. 단점으로는 이름을 잘못 입력하는 등의 실수도 커파일러가 걸러내지 못한다 ㅜㅜ

    Kotlin은 '타입추론'기술을 통해 컴파일러가 문맥을 고려해 변수 타입을 결정할수 있게 한다.

    var number = 1 // number은 자동으로 Int Type을 추론해 낸다.

     

    정적타입 지정의 장점

    • 성능 : 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없어 메소드 호출이 빠르다.
    • 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 오류에의한 종료의 가능성이 적어진다.
    • 유지보수성 : 객체가 어떤 타입에 속하는지 알수 있기때문에 유지보수가 편하다.
    • 도구지원 : 안전한 리펙토링을 할수 있고 도구는 더 정확한 코드 완성 기능을 제공할수 있다.

     

    Kotlin의 Nullable

    kotlin은 Null이 될수 있는 타입을 지원한다. 이렇게 되면 컴파일러 시점에 Null pointer exception가 발행할 수 있는 여부를 검사 할 수있다.

    var s:String? = null // null이 될 수 있다.
    var s2: String = "" // null이 될 수 없다.
    

     

     

    Kotlin의 함수타입 지원

    Kotlin이 함수타입을 지원하면서 간결한 코드를 작성할수 있게 되고 '불변성' 특징에 의해 멀티 스레드를 사용해도 safe multithreading하도록 한다. 함수형 프로그램은 테스트시 전체 환경을 구성하는 준비 코드가 따로 필요 없어 독립적 테스트또한 쉽다.

    이외에도 함수 타입 지원을 통해 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있다. 람다식을 지원함에 따라 코드 블록을 쉽게 정의하고 사용할수 있다. 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다.

     

     

    함수형 프로그래밍 장점

    • 일급 시민인(First class) 함수 : 함수를 변수에 담을수 있고 인자로 넘겨주거나 받을수 있다. 또한 함수내에서 새로운 함수를 만들어 낼수도 있다.
    • 불변성 : 함수형 프로그래밍은 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
    • 부수효과 없음 : 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수을 사용한다.

     

    코틀린 응용

    서버 개발뿐 아니라 안드로이드 개발에서 코틀린이 널리 쓰이고 있다.

    코틀린은 새로운 컴퓨넌트를 작성하거나 기존 서비스 코드를 코틀린으로 이식해야 하는 경우에 모두 잘 들어 맞는다. 

    자바 <-> 코틀린 코드 유동적으로 모두 사용할 수 있다는 말;;

    또한 코틀린이 제공하는 새로운 기술을 활용해 편리한 기능을 사용할수 있다.

     

    코틀린의 빌더 패턴 : 간결한 구문을 사용해 객체로 이뤄진 그래프를 쉽게 구축하면서도 코틀린이 제공하는 완전한 추상화와 코드 재활용을 지속적으로 누릴수 있다.

    아래의 코드를 보면 별도의 템플릿 언어를 사용하지 않고도 쉽게 DOM을 생성할 수 있다 

    fun renderPersonList(persons: Collection<Person>) = 
    	createHTML().table{
        	for(person in persons){
            	tr{
                	td{ +person.name}
                    td{ +person.age}
                }
            }
        }

    코틀린이 제공하는 깔끔하고 간결한 DSL기능을 활용할 수 있는 다른 예로 영속성 프레임워크를 들수 있다.

    익스포즈드 프레임워크는 SQL 데이터베이스의 구조를 기술할 수 있는 읽기 쉬운 DSL을 제공하며, 코틀린 코드만을 사용해 완전한 타입 검사를 지원하면서 데이터베이스 질의를 실행할 수 있다.

    // 데이터베이스 테이블에 대해 기술한다.
    object ContryTable : IdTable(){
        var name = varchar("name", 250).uniqueindex();
        var iso = varchar("iso", 2).uniqueIndex();
    }
    
    // 데이터베이스 엔티티에 해당하는 클래스를 만든다.
    object Contry(id: EntryID) : Entry(id){
        var name: String by ContryTable.name;
        var iso: String by ContryTable.iso;
    }
    
    // 오직 코틀린 코드만으로 이 데이터베이스에 질의를 던질수 있다.
    var russia = Contry.find{
    	ContryTable.iso.eq("ru");
    }.first()
    
    println(russia.name);

     

    간결성

    Kotlin을 통해 간결한 코드를 작성할수 있다. 몇번째 반복하는 말인가..

     

    안전성

    Null pointer exception만큼 자주? 만날수 있는 에러는 캐스트 에러일것이다. 이런 캐스트 에러를 Kotlin은 아래처럼 해결하고자한다.

    "어떤 객체의 타입을 검사했고 그 객체가 그 타입에 속한다면 해당 타입의 메소드나 필드 등의 멤버를 별도의 캐스트 없이 사용할 수 있다. 따라서 타입 검사를 생략할 이유가 없고, 검사를 생략하지 않으면 검사를 생략해서 생기는 오류가 발생할 일도 없다,"

     

    if(value is String){ // 타입검사
    	println(value.toUpperCase()); // 이미 타입검사를 했기때문에 타입의 메소드를 사용한다.
    }
    

     

    상호운용성

    자바코드에서 또는 Kotlin코드에서 각 언어의 코드를 하출해도 전혀 문제가 되지 않는다.

    자바와 코틀린 소스 파일을 자유롭게 내비게이션할 수 있다.

    여러 언어로 이뤄진 프로젝트를 디버깅하고 서로 다른 언어로 작성된 코드를 언어와 상관없이 한 단계씩 실행할 수 있다.

    자바 메소드를 리펙토링해도 그 메소드와 관련 있는 코틀린 코드까지 제대로 번경된다.

     

     

    Kolin 도구 사용

    자바오 마찬가지로 Kolin도 컴파일 언어이다. 따라서 코틀린 코드를 실행하기 전에 코드를 컴파일해야한다.

    코틀린 소스코드를 저장할 때는 보통 .kt라는 확장자를 파일에 분힌다. 코틀린 컴파일러는 자바컴파일러가 자바 소스를 컴파일할 때 와 마찬가지로 코틀린 소스코드를 분석 해서 .class 파일을 만든다.

    코틀린으로 컴파일한 애플리케이션을 배포할때는 런타임 라이브러리도 함께 배포해야한다.

     

     

    'Kotlin' 카테고리의 다른 글

    Kotlin Clock mockito  (1) 2021.11.10
    Kotlin 기본 문법  (0) 2019.08.03
    코틀린 기본요소  (2) 2019.03.20
    코틀린 프로젝트 생성 및 실행  (0) 2019.03.20

    댓글

Designed by Tistory.