CH1. 코틀린이란 무엇이며, 왜 필요한가?
코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어다. 간결하고 실용적이며, 자바 코드와의 상호운용성을 중시한다.
- 코틀린 기본 기능 데모
- 코틀린 언어의 주요 특성
- 코틀린을 활용한 안드로이드와 서버 개발
- 코틀린이 다른 언어보다 더 나은 점
- 코틀린으로 코드를 작성하고 실행하는 방법
코틀린 맛보기
Person
이라는 클래스를 정의하고, 그 클래스를 사용해 모아둔 컬렉션을 만들고, 가장 나이가 많은 사람을 찾아 결과를 출력한다.
data class Person(val name: String, val age: Int? = null) // 널이 될 수 있는 타입(Int?)과 파라미터 티폴트 값이다.
fun main() { // 최상위 함수
val persons = listOf(Person("아용"), Person("애용", age = 20)) // 이름 붙인 파라미터
val oldest = persons.maxByOrNull { it.age ?: 0 } // 람다식과 엘비스 연산자
println("나이가 가장 많은 사람: $oldest") // 문자열 템플릿
}
리스트에서 가장 나이가 많은 사람을 찾기 위해 maxBy
함수를 사용한다. maxBy
함수에 전달한 람다식은 파라미터를 하나 받는다. it
이라는 이름을 사용하면 람다식의 유일한 인자를 사용할 수 있다.
엘비스 연산자(Elvis operator)라고 부르는 ?:
는 age가 null인 경우 0을 반환한다.
코틀린의 주요 특성
대상 플랫폼: 서버, 안드로이드 등 자바가 실행되는 모든 곳
코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.
코틀린이 정한 목표 영역은 상당히 광범위하다. 코틀린은 어느 한 문제 영역만을 해결하거나 오늘날 소프트웨어 개발이 처한 어려움 중 일부만을 다루기 위한 언어가 아니다.
대신 코틀린은 개발 과정에서 수행해야 하는 모든 과업에 있어 폭넓게 생산성을 향상시켜준다.
정적 타입 지정 언어
정적 타입 지정이라는 말은 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻이다.
동적 타입 지정 언어
- 타입과 관계없이 모든 값을 변수에 넣을 수 있고, 메서드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다.
- 반대로 이름을 잘못 입력하는 등의 실수도 컴파일 시 걸러내지 못하고 실행 시점에 오류가 발생한다.
- JVM에서는 그루비나 JRuby가 대표적은 동적 타입 지정 언어다.
자바와 달리 코틀린은 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없다. 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에 생략 가능하다.
이런 기능을 타입 추론이라고 부른다.
정적 타입 지정의 장점을 살펴보자!
- 성능: 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없어서 메서드 호출이 더 빠르다.
- 신뢰성: 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.
- 유지 보수성: 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.
- 도구 지원: 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.
(자바에는 없는) 코틀린의 가장 중요한 특성도 살펴보자!
- 널이 될 수 있는 타입(nullable type)을 지원한다는 점이다.
- 함수 타입에 대한 지원
함수형 프로그래밍과 객체지향 프로그래밍
함수형 프로그래밍의 핵심 개념
- 일급 시민인 함수: 함수를 일반 값처럼 다룰 수 있다.
- 불변성: 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용한다.
- 부수 효과 없음 : 입력이 같으면 항상 같은 출력을 내놓고, 다른 객체의 상태를 변경하지 않으며 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다.
함수형 프로그래밍의 장점
- 간결성: 명령형 코드에 비해 더 간결하고 우아하다. 강력한 추상화를 할 수 있고 이를 사용해 코드 중복을 막을 수 있다.
fun findAlice() = findPerson { it.name == "Alice" } // findPerson에는 사람을 찾는 일반 로직이 들어가 있다. fun findBob() = findPerson { it.name == "Bob" } // 중괄호 사이에 있는 코드 블록은 찾으려는 사람을 식별한다.
- 다중 스레드에 안전: 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다.
- 테스트하기 쉬움
- 무료 오픈소스
코틀린의 철학
코틀린이 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어라고 설명한다.
요약
- 코틀린은 타입 추론을 지원하는 정적 타입 지정 언어이다.
- 코틀린은 객체지향과 함수형 프로그래밍 스타일을 모두 지원한다.
- 코틀린은 서버 개발, 안드로이드에도 잘 활용할 수 있다.
- 코틀린은 무료며 오픈 소스다.
- 코틀린은 실용적이며 안전하고, 간결하며 상호운용성이 좋다. 이는
NPE
과 같이 흔히 발생하는 오류를 방지하고, 읽기 쉽고 간결한 코드를 지원하면서 자바와 아무런 제약 없이 통합될 수 있는 언어를 만드는데 초점을 맞췄다는 뜻입니다.
'3-1기 스터디 > Kotlin' 카테고리의 다른 글
[7주차] 람다로 프로그래밍(1) (0) | 2021.12.26 |
---|---|
[5주차] 클래스, 객체, 인터페이스(2) (0) | 2021.11.28 |
[4주차] 클래스, 객체, 인터페이스 (0) | 2021.11.21 |
[3주차] 함수 정의와 호출 (0) | 2021.11.16 |
[2주차] 코틀린 기초 (0) | 2021.11.07 |
댓글