728x90
반응형
코틀린이란?
자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
코틀린은 기존 자바 라이브러리나 프레임워크와 함께 잘 작동하며, 성능도 자바와 같은 수준임
대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것
코틀린을 활용할 수 있는 가장 일반적인 영역은 다음과 같음
-
서버상의 코드(특히 웹 애플리케이션의 백엔드)
-
안드로이드 디바이스에서 실행되는 모바일 애플리케이션
자바뿐 아니라 자바스크립트로도 코틀린을 컴파일할 수 있음
따라서 코틀린 코드를 브라우저나 노드에서 실행 가능 (코틀린 1.1부터는 자바스크립트를 공식적으로 지원한다 밝힘)
코틀린이 정한 목표 영역은 상당히 광범위함
코틀린은 구체적인 영역의 문제를 해결하거나 특정 프로그래밍 패러다임을 지원하는 여러 라이브러리와 아주 잘 융합됨
코틀린이 갖는 핵심 특성
정적 타입 지정 언어
자바와 마찬가지로 코틀린도 정적 타입 지정 언어임
정적 타입 지정이라는 말은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻
이런 점은 다른 동적 타입 지정 언어와는 다름
JVM에서는 그루비(Groovy)나 JRuby가 대표적인 동적 타입 지정 언어임
동적 타입 지정 언어세너느 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메소드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있음
하지만 이는 실행 시점에 오류가 확인되는 위험이 있음
한편 자바와 달리 코틀린에서는 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 프로그래머는 타입 선언을 생략해도 됨(이런 기능을 타입 추론이라고 부름)
var x = 1 // x를 정수(Int) 값으로 초기화
정적 타입 지정의 장점
-
성능 : 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없으므로 메소드 호출이 더 빠름
-
신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적음
-
유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉬움
-
도구 지원 : 정적 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있음
코틀린은 타입 추론을 지원하므로 정적 타입 지정 언어에서 프로그래머가 직접 타입을 선언해야 함에 따라 생기는 불편함이 대부분 사라짐
그리고 코틀린의 특성 중 가장 중요한 특성은 널이 될 수 있는 타입을 지원한다는 점
코틀린의 타입 시스템에 있는 다른 새로운 내용으로는 함수 타입(function type)에 대한 지원을 들 수 있음
함수 타입이 무엇인가 알아보기 위해 함수형 프로그래밍이 어떤 개념인지와 코틀린이 함수형 프로그래밍을 어떻게 지원하는지에 대해 먼저 알아보기
함수형 프로그래밍과 객체지향 프로그래밍
함수형 프로그래밍의 핵심 개념은 다음과 같음
일급 시민인 함수
함수(프로그램의 행동을 나타내는 코드 조각)를 일반 값처럼 다룰 수 있음
함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있음
불변성
함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성
부수 효과(side effect) 없음
함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용함
함수형 스타일의 장점?
☝ 간결성
함수형 코드는 그에 상응하는 명령형 코드에 비해 더 간결하며 우아함
(순수)함수를 값처럼 활용할 수 있으면 더 강력한 추상화를 할 수 있고, 강력한 추상화를 사용해 코드 중복을 막을 수 있음
✌ 다중 스레드를 사용해도 안전함
다중 스레드 프로그램에서는 적절한 동기화 없이 같은 데이터를 여러 스레드가 변경하는 경우 가장 많은 문제가 생김
불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없음
따라서 복잡한 동기화를 적용하지 않아도 됨
👌 함수형 프로그램은 테스트하기 쉬움
부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 그런 준비 코드 없이 독립적으로 테스트할 수 있음
코틀린은 처음부터 함수형 프로그래밍을 풍부하게 지원했음
-
함수 타입을 지원함에 따라 어떤 함수가 다른 함술흘 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있음
-
람다식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달할 수 있음
-
데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공
-
코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공
코틀린은 함수형 스타일로 프로그램을 짤 수 있게 지원하지만 함수형 프로그래밍 스타일을 강제하지는 않음
명령형 방식이 더 적합한 경우라면 함수형 프로그래밍으로 번거롭게 코드를 작성할 필요 없이 직접 변경 가능한 데이터와 부수 효과를 활용하는 함수를 사용해도 됨
무료 오픈소스
코틀린 언어와 컴파일러, 라이브러리 및 코틀린과 관련된 모든 도구는 모두 오픈소스며, 어떤 목적에든 무료로 사용할 수 있음
참고자료
https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
코틀린 기초(while과 for) (0) | 2022.01.11 |
---|---|
코틀린 기초(enum과 when) (0) | 2022.01.10 |
코틀린 기초(클래스와 프로퍼티) (0) | 2022.01.06 |
코틀린 기초(함수와 변수) (0) | 2022.01.05 |
코틀린 응용 (0) | 2022.01.04 |