본 게시글은 Kotlin In Action을 공부하고 정리한 글로 내용이 책과 조금 다를 수 있습니다.
코틀린이란?
코틀린은 자바 플랫폼에서 돌아가는 프로그래밍 언어이다. 간결하며 실용적인 언어로, 자바코드와 상용성을 중시한다.
자바가 사용되는 곳이라면 어디든 사용 가능하며, 대표적으로 서버 개발, 앱 개발이 있다.
1.1 코틀린 맛보기
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가 들어간 데이터 클래스를 정의한다.
age는 null이 디폴트 값이다.
persons에서 영희라는 name 지정했지만 age값은 지정하지 않았으니 null이 들어간다.
책에서는 가장 나이 많은 사람을 찾는 함수로 maxby를 사용했지만, 이전 버전에서만 정상적으로 작동되는 함수라 한다.
maxby대신 maxByOrNull을 사용하면 원하는 기대값을 얻을수 있다.
람다는 파라미터를 하나만 받을수 있는데, 이는 it을 사용하여 람다식의 인자로 사용했다.
엘비스 연산자 ?:은age가 null이면 0을 반환하고 그렇지 않으면 age를 반환한다.
영희는 age를 지정하지 않아 null이 반환되고, 철수는 age = 29이기 때문에 가장 나이 많은 사람에 철수가 반환된다.
1.2 코틀린의 주요 특성
코틀린의 주요 특성에 대해 알아보자.
코틀린의 대상 플랫폼 : 서버, 안드로이드 등 자바가 실행 되는 모든곳
코틀린의 주목적은 현재 자바가 사용되는 모든 용도에 적합하게 사용되면서 간결하고, 생산적이며 안전한 대체 언어를 제공하는 것이다.
정적 타입 지정 언어
자바와 마찬가지로 코틀린도 정적타입 언어다. 정적 타입 지정은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증하는 것이다.
정적 타입 지정의 장점은 성능, 신뢰성, 유지보수성, 도구지원이 있다.
- 성능 실행 시 어떤 메서드를 호출할지 알아내는 과정이 필요하지 않아 메서드 호출이 빠름
- 신뢰성 컴파일러가 프로그램의 정확성을 검증하기 때문에 프로그램 실행시 오류로 중단될 가능성이 적음
- 유지보수 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있어 처음 보는 코드를 다룰 때도 더 쉬움
- 도구지원 안전하게 리펙토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할수 있음
정적 타입 지정(Java)의 단점은 모든 변수 타입을 프로그래머가 직접 명시해야 한다는 점이다.
int x = 1; //자바
하지만 코틀린은 컴파일러가 변수타입을 자동으로 유추할수 있다. 이를 타입추론이라 한다.
var x = 1 //코틀린
함수형 프로그래밍과 객체지향 프로그래밍
함수형 프로그래밍의 개념은 아래 세가지로 말할 수 있다.
- 일급 시민인 함수 함수를 일반값처럼 다룰수 있다.함수를 변수에 저장하거나 함수를 다른 인자로 다른 함수에 전달이 가능하고, 함수에서 새로운 함수를 만들어 봔한 할수 있다.
- 불변성 일단 만들어지면 내부는 절대 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다,
- 부수 효과 없음 입력이 같으면 항상 같은 출력을 내놓고, 다른 객체의 상태를 변경하지 않으며, 함수 외부와 상호 작용하지 않는 순수 함수를 사용한다.
함수형 프로그래밍의 장점
- 코드의 간결성
- 다중 스레드를 사용해도 안전
일반적으로 언어와 상관없이 함수형 스타일을 사용할 수 있다. 그리고 함수형 프로그래밍 스타일을 이루는 여러 요소는 좋은 프로그래밍 스타일이다. 하지만 모든 언어가 함수형 프로그래밍을 사용하기에 충분한 라이브러리를 제공하지 않는다.
코틀린은 처음부터 함수형 프로그래밍을 지원했다. 객체지향도 당연히 가능하니, 객체지향과 함수형을 적절히 사용하면 된다.
무료 오픈소스
코틀린과 관련된 모든 도구는 오픈소스이며, 어떤 목적이든 무료로 사용 가능하다.
1.4 코틀린의 철학
코틀린은 실용성, 간결성, 안전성, 상호운용성에 초점을 둔 언어이다. 각각은 어떤 의미 일까?
실용성
코틀린은 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 가능에 의존한다. 이로 인해 언어의 복잡고가 줄고 이미 알고 있눈 개념으로 쉽게 배울수 있다.
간결성
코드가 간결할수록 생산성을 향상 시켜주고, 개발을 더 빠르게 진행할 수 있게 해준다.
코틀린은 코드의 의미없는 부분은 줄였고, 부수적인 요소를 줄이기 위해 노력했다. 케터, 세터, 생성자 파라미터를 묵시적으로 제공하기 떄문에 코드가 간결해진다.
또한 람다를 지원하기 때문에 작은 코드 블록을 라이브러리 함수에 쉽게 전달할 수 있다.
안전성
코틀린은 컴파일러가 타입을 자동으로 추론하기 때문에 어플리케이션의 타입 안전성을 보장한다.
코틀린의 타입 시스템은 null이 될수 없는 값을 추적하여, 실행 시점에 NullPointerExxeption이 발생할 수 있는 연산을 사용하는 코드를 금지한다. 어떤 타입이 널이 될 수 있는지 여부를 표시하기 위해서 ?한글자만 추가하면 된다.
val s: String? = null //널이 될수 있음
val s1: String = "" //널이 될수 없음
상호운용성
라이브러리가 어떤 API를 제공했던 간에 코틀린에서 그 API를 활용할 수 있다.
1.5 코틀린 도구 사용
코틀린도 컴파일 언어이다. 컴파일 과정에서 어떤 도구가 사용되는지 알아보자.
코틀린 코드 컴파일
코틀린 소스를 컴파일 할때는 .kt라는 확장자를 파일에 붙인다. 코틀린 컴파일러는 코틀린 소스를 분석해서 .class파일을 만들어 낸다. class파일은 개발중인 어플리케이션의 유형에 맞는 표준 패키지 과정을 거쳐 실행 될수 있다. 가장 간단한 방식은 컴맨드라인에서kotlinc 명령을 통해 코틀린 코드를 컴파일한 다음 java명령으로 그 코드를 실행하는 것이다.
인텔리J 아이디어와 안드로이드 스튜디오의 코틀린 플러그인
설정 - 플러그 인 - 젯브레인스 플러그인 설치 - 코틀린
대화형 셀
REPL
이클립스 플러그인
이클립스에서도 코틀린 사용이 가능하다
온라인 놀이터
http://try.kotl.in 을 사용하면, 웹에서도 코틀린이 사용 가능하다.
자바-코틀린 변환기
인텔리J에서 쉽게 변환이 가능하다. 코드 - 자바 파일을 코틀린파일로 변환을 선택하면 된다.


'App > Kotlin' 카테고리의 다른 글
| 2장 코틀린 기초 - 1 (0) | 2022.07.01 |
|---|---|
| 0장 Kotlin In Action 공부 시작 (0) | 2022.06.30 |