Kotlin

Kotlin - 코틀린이란 ?

엔꾸꾸 2020. 10. 18. 20:24

코틀린이란 ?

JVM 위에서 돌아가는 새로운 프로그래밍 언어이다.

간결하고, 실용적이며 자바와의 상호 운용성을 중시한다.

현재 자바를 사용중인곳이라면 대부분 코틀린을 활용할 수 있다.

 

 

맛보기

코틀린 샘플코드 작성 가능한 사이트

https://play.kotlinlang.org

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

data class Person(val name: String, val age: Int? = null) // 데이터 클래스 정의

fun main(args: Array<String>) {
    val persons = listOf(Person("엔꾸꾸"), 
                        Person("준영", age = 29)) // 이름이 있는 파라미터
    
    val oldest = persons.maxBy { it.age ?: 0 } // 람다식과 엘비스 연산자
    println("나이가 가장 많은사람 : $oldest") // 문자열 템플릿
    // 나이가 가장 많은사람 : Person(name="준영", age=29) <= 실행결과
}

 

 

주요 특성

1. 대상 플랫폼 - 자바가 실행되는 모든 곳

생산 적이며, 안전한 대체 언어를 제공한다.

자바 뿐 아니라 자바스크립트 환경에서도 코틀린 컴파일이 가능하다.

- 브라우저나 노드에서 실행이 가능하다.

 

2. 정적 타입 지정 언어

자바와 마찬가지로 정적 타입 지정 언어이다.

모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 컴파일러가 타입을 검증해 준다.

동적 타입 언어와는 다르다.

코틀린에서는 모든 변수 타입을 명시할 필요가 없으며, 코틀린 컴파일러가 변수 타입을 유추한다.

이를 타입 추론 이라고 한다.

 

 

정적 타입 지정 언어의 장점

1. 성능

- 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 없으므로 메소드 호출이 빠르다.

2. 신뢰성

- 컴파일 시점에 에러 검증이 가능하다.

3. 유지보수성

- 코드에서 다루는 개체가 어떤 타입에 속하는지 알 수 있기 때문에 알아보기 쉽다.

4. 도구 지원

- 안전한 리팩토링이 가능하고, IDE의 도움을 받기 쉽다.

 

 

함수형 프로그래밍과 객체지향 프로그래밍

함수형 프로그래밍의 핵심 ?

1. 일급 시민 (first-class) 함수

- 함수를 일반 값 처럼 변수에 저장이 가능하고, 인자로 사용할 수 있으며, 함수 내에서 새로운 함수를 반환할 수 있다. (쉽게 생각하면 함수를 값처럼 다룬다.)

2. 불변성

- 생성되고 나면 내부상태가 변하지 않는 불변 객체를 사용한다.

3. 사이드 이펙트가 없다.

- 위의 내용에서 이어지는데, 불변성을 유지하고, 입력값이 같다면 항상 같은 결과를 반환하고

- 다른 객체의 상태를 변경하지 않는 외부 환경과 격리된 순수 함수 (pure function) 를 사용한다.

 

 

함수형 프로그래밍의 장점

1. 간결성

- 명령형 코드에 비해 간결하며, 강력한 추상화를 할 수 있다.

- 람다식을 활용한 간결한 표현이 가능하다.

2. Thread-Safe 

- 불변 데이터 구조를 사용하고, 순수 함수를 사용하기 때문에 복잡한 동기화를 적용하지 않아도 된다.

3. 테스트 용이성

- 순수 함수는 준비된 코드 없이 독립저인 테스트가 가능하다.

 

코틀린에서 함수형 스타일을 강제하지 않으며, 명령형 방식이 더 적합하면 해당 방식으로도 개발이 가능하다.

 

자바와 코틀린을 비교했을때 이점중 하나는 코틀린은 인자로 받은 람다 함수를 인라이닝 한다. 

람다를 사용해도 매번 새로운 객체가 생성되지 않기 때문에 객체 증가로 인한 GC 가 자주 일어나지 않는다.

 

 

코틀린의 철학

1. 실용성

2. 간결성

- 작성하는 코드내에서 의미없는 반복 코드를 줄였다.

- getter, setter 등..

3. 안전성

- JVM 환경이 가지는 모든 이점을 가지고 있다.

- 메모리 안정성, 버퍼, 오버플로우 방지 등등..

- 컴파일 시점에 많은 오류를 잡아준다.

4. 상호운용성

 

 

코틀린 코드 컴파일

코틀린 소스코드는 .kt 확장자를 사용한다.

자바와 동일하게 .class 파일로 컴파일된다.

- kotlinc <소스파일> -include-runtime-d <jar 파일명>

- 컴파일된 코드는 코틀린 런타임 라이브러리에 의존하게 된다.

배포시 런타임 라이브러리도 함께 배포되어야 한다.

 

 

정리

- 코틀린은 타입 추론을 지원하는 정적 타입 언어이다.

- 객체지향과 함수형 프로그래밍 모두 지원한다.

- 실용적이고 안전하며 간결하고 상호운용성이 좋다.