회사에서 주된 개발언어를 코틀린로 바꾸고 있는 분위기인듯하다.
그래서 나도 이제 코틀린에 익숙해져야한다..두둥..
그런 의미로 코틀린을 한번 정리해보려고 한다.
일단 언어를 익히기에 앞어서 왜 쓰는지, 어떤특징이 있는지 간단한 개념부터 살펴봐아겠다.
코틀린
코틀린의 시작
intellj,pycharm 등 IDE 툴을 만든 젯브레인즈(jetbrains)에서 개발한 언어.
2011년에 발표되었고, 코틀린섬 이름으로부터 지어졌고, 2017년 구글에서 안드로이드 공식언어로 선택되었다.
코틀린으로 무엇을 할 수 있는가?
자바를 대체할 수 있는 언어로, 다음과 같은 프로그래밍이 가능한 멀티 플랫폼이다.
- Kotlin/JVM - 자바 가상 머신 상에서 동작하는 앱(자바앱/안드로이드앱)개발.
- Kotlin/JS - 자바스크립트에 의해 DB부터 서버,클라이언트까지 다루는 풀스택 웹개발.
- Kotlin/Native - 안드로이드와 IOS뿐만 아니라 임베티드,IoT 등 앱 개발.
즉 서버 안드로이드 등 자바가 실행되는 모든 곳에서 사용할 수 있다.
코틀린 특징
정적 타입 지정 언어
코틀린은 정적타입 지정언어이다.
즉, 모든 프로그램의 구성요소를 컴파일 시점에 알수 있고, 컴파일러가 타입을 검증해준다는 것이다.
그래서 자바와 다르게 개발자가 타입을 선언하지 않아도 된다. (타입추론지원)
코틀린 컴파일러가 문백으로부터 변수타입을 자동으로 유추할 수 있기 때문에 타입선언을 생략해도 된다.
결국 개발자가 아니라 컴파일러가 프롣그램의 정확성을 검증하기 때문에 프로그램이 오류로 중단될 가능성이 적어진다.
Null 안정성
코틀린은 널이 될 수 있는 타입도 지원한다.
널 값 허용여부를 컴파일 단계에서 검사하기 때문에 널 포인터로 인한 프로그램 중단도 예방할 수 있다.
자바에선 런타임에시 변수에 널이 입력되서 널 포인터 예외(null pointer exception)으로 죽는 경우가 많은데
코틀린은 이걸 잡아준다! 이를 널포인터(NPE)에서 자유롭다고 표현한다.
함수 타입에 대한 지원
코틀린은 함수형 프로그래밍(Functional Programming)을 지원한다.
거의 모든 프로그램의 행동을 나타내는 코드조각을 순수함수로 나누어 문제를 해결한다.
함수를 작성해서 변수에 저장할 수 있고, 다른함수에 전달할 수 있고, 반환할 수도 있다.
그래서 가독성을 높이고 유지보수를 용이하게 할 뿐만 아니라
함수를 통해 불변데이터 구조를 사용하기 때문에 다중스레드를 사용해도 안정적이다.
코틀린, 왜 쓰는건가?
결론적으로 코틀린은 자바와 호환도 잘되면서 실용적으로 간결하면서 안전한 언어이기 때문이다.
자바와 호환성
자바 메소드 호출, 자바클래스 상속, 인터페이스 구현, 자바 어노테이션 등 자바에서 적용하던걸 모두 코틀린에서 할 수 있다.
심지어 기존 자바 라이브러리를 가능하면 최대한 활용할 수 있다.
자체 컬렉션 라이브러리가 아니라 자바 표준 라이브러리 클래스에 의존하 때문이다.
실용적이다
다른 프로그래밍 언어가 채택해서 이미 성공적으로 검증된 해법과 기능만 담았다.
예를 들어 자바에서 사용해온 익숙한 프로그래밍 스타일을 코틀린에 적용할 수 있다.
간결하다
코틀린 코드는 간단하고 간결하다.
예를 들어 getter, setter, 생성자 파라미터를 대입로직 등 자바에선 번거로웠던 코드를 코틀린에선 묵시적으로 제공한다.
그리고 람다 표현식도 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있다.
안전하다
우선 JVM에서 실행하기 때문에 상당한 안전성을 보장할 수있다.
JVM을 사용하면 메모리안전성을 보장하고, 버퍼오버플로우도 방지하고, 동적메모리할당으로 인한 문제도 예방할 수 있다.
또한 앞서 말한 특징처럼 정적타입 지정언어로 타입자동추론을 사용해서 타입 안정성을 보장한다.
그리고 널타입 지원도 되기 때문에 NullPointerException으로 인한 프로그램 오류도 방지해준다.
참고
https://incheol-jung.gitbook.io/docs/study/kotlin-in-action/1
'🍃 Language > Kotiln' 카테고리의 다른 글
[Kotlin] 코틀린 실행하기 - Scratch File (스크래치 파일) 만들기 (0) | 2022.01.30 |
---|---|
[Kotlin]🐘빌드도구(Build Tool), Gradle과 Maven 차이점 (0) | 2022.01.30 |
[Kotlin] Intellij에서 코틀린 코딩컨벤션 Kotlin Style Guide 적용하기 (0) | 2022.01.29 |
[Kotlin] 코틀린 기본문법1 (변수선언/함수선언/자료형/반복문/조건문) (0) | 2022.01.29 |
[Kotlin] 코틀린 Spring boot로 HelloWorld API 만들기 (0) | 2022.01.28 |
[Kotlin] 코틀린 환경설정 - Intellj에서 코틀린 프로젝트 생성하기 (0) | 2022.01.28 |