Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 윤성우 열혈자료구조
- 메모리구조
- 혼자 공부하는 C언어
- 윤성우의 열혈 자료구조
- Stack
- 알기쉬운 알고리즘
- Selection Sorting
- stream
- C 언어 코딩 도장
- Algorithm
- Serialization
- R
- coding test
- list 컬렉션
- Graph
- JSON
- insertion sort
- 이것이 자바다
- C programming
- 이스케이프 문자
- datastructure
- buffer
- s
Archives
- Today
- Total
Engineering Note
[Kotlin] 1. 코틀린이란 무엇이며, 왜 필요한가? 본문
Programming Language/Kotlin
[Kotlin] 1. 코틀린이란 무엇이며, 왜 필요한가?
Software Engineer Kim 2022. 4. 29. 22:18본 글은 책 <Kotlin IN ACTION - 코틀린 컴파일러 개발자가 알려주는 코틀린 언어 핵심>(저자 드미트리 제메로프, 스베트라나 이사코바 지음)를 참고하여 정리한 글입니다.
What is Kotlin?
- Kotlin은 Java플랫폼에서 돌아가는 새로운 프로그래밍 언어다.
- Kotlin은 간결하고 Java 코드와의 상호운용성을 중시한다.
- 현재 Java가 사용중인 곳이라면 거의 대부분 코틀린을 활용할 수 있다. 대표적으로 Server 개발, Android app 개발 등의 분야에서 Kotlin을 쓸 수 있다. Kotlin은 기존 Java library나 Framework와 함께 잘 작동하며, 성능도 Java와 같은 수준이다.
1.1 Kotlin 맛보기
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.maxByOrNull{ it.age ?: 0 }
println("나이가 가장 많은 사람 : $oldest")
}
출력

코드 설명
- name과 age라는 property가 들어간 간단한 data class를 정의한다. age peroperty의 defalut 값은 null이다. persons list를 만들면서 영희의 나이를 지정하지 않았기 때문에 null이 대신 쓰인다. list에서 가장 나이가 많은 사람을 찾기 위해 maxByOrNull(코틀린 1.4버전부터 maxBy함수가 폐기되고 maxByorNUll로 대체)함수를 사용한다. maxBy 함수에 전달한 lambda expression은 parameter를 하나 받는다. it이라는 이름을 사용하면 lambda expression의 유일한 인자를 사용할 수 있다. Elvis operator라고 부르는 ?:는 age가 null인경우는 0을 반환하고, 그렇지 않은 경우는 age의 값을 반환하도록 해준다. 영희는 나이를 지정해주지 않았지만 Elvis operator가 null을 0으로 변환해주기 때문에 철수가 가장 나이가 많은 사람으로 선정될 수 있다.
1.2 Kotlin의 주요 특성
1.2.1 Java가 실행되는 모든 곳에서 실행 가능 + 다양한 환경에서 실행가능
- 코틀린은 현재 Java가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.
- 대상 플랫폼: Sever(웹 애플리케이션의 백엔드), Android 등 Java가 실행되는 모든 곳
- 이외에도 코틀린은 다른 환경에서도 잘 작동한다.
- 인텔의 multi OS engine을 사용하면 iOS에서도 실행 가능, Kotlin과 토네이도FX, JavaFX를 사용하면 데스크탑 애플리케이션도 개발가능하다.
- Javascript로 compile해 browser나 Node에서 실행하는 것도 가능하다.
1.2.2 statically typed - 정적 타입 지정 언어
- Java와 마찬가지로 Kotlin도 statically typed 언어이다. statically typed 언어라는 말은 모든 프로그램 구성 요소의 type을 compile 시점에 알 수 있고 프로그램 안에서 object의 field나 method를 사용할 때마다 compiler가 type을 검증해준다는 뜻이다.
- 이런 점은 다른 dynamically typed 언어와는 달다. JVM에서는 Groovy나 JRuby가 대표적인 dynamically typed언어다. dynamically typed에서는 type과 관계없이 모든 값을 변수에 넣을 수 있고, method나 field 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 하지만 반대로 이름을 잘못 입력하는 등의 실수도 copmpile 시 걸러내지 못하고 실행시점에 오류가 발생한다.
- 한편 Kotlin은 statically typed임에도 Java와 달리 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없다. 대부분의 경우 Kotlin complier가 문맥으로부터 변수 type을 자동으로 유추 할 수 있기 때문에 프로그래머는 type 선언을 생략해도 된다.
- 위 코드는 변수를 정의하면서 Int 값으로 초기화한다. Kotlin은 이 변수의 type이 Int임을 자동으로 알아낸다. compiler가 문맥을 고려해 변수 tyhpe을 결정하는 이런기능을 type inference(타입추론)이라고 부른다.
- Kotlin은 type inference를 지원하므로 statically typed language에서 프로그래머가 직접 type을 선언해야 함에 따라 생기는 불편함이 대부분 사라진다.statically typed의 장점
var x= 1- 성능 : 실행 시점에 어떤 method를 호출할지 알아내는 과정이 필요 없으므로 method 호출이 더 빠르다.
- 신뢰성 complier가 프로그램의 correctness을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.
- 유지보수성 : 코드에서 다루는 object가 어떤 type에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
- 도구 지원 statically typed을 활용하면 더 안전하게 refactoring 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.
Kotlin type system
- 자바와 바찬가지로 class, interface, generics
- Kotlin의 가장 중요한 특성은 nullable type을 지원한다는 점이다.
- null이 될 수 있는 type을 지원함에 따랄 compile 시점에 null pointer exception이 발생할 수 있는지 여부를 검사할 수 있어서 좀 더 프로그램의 신뢰성을 높일 수 있다.
- function type 지원
1.2.3 함수형 프로그래밍과 객체지향 프로그래밍
참고자료 : Kotlin IN ACTION
'Programming Language > Kotlin' 카테고리의 다른 글
| [Kotlin] 코틀린 출력 디버깅 (0) | 2022.04.29 |
|---|---|
| [Kotlin] 배열 (0) | 2022.04.21 |
Comments