반응형
코틀린이란?
- 자바 플랫폼에서 돌아가는 프로그래밍 언어
- 자바와의 상호운용성에 초점을 맞춘 실용적이고 간결하며 안전한 언어
대상 플랫폼
- 서버 (backend)
- 안드로이드 모바일 애플리케이션
- 등등 (iOS, 자바스크립트…)
코틀린은 정적 타입(statically typed) 지정 언어
- 정적 타입 지정 언어? : 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 필드나 메소드 사용 시 컴파일러가 타입을 검증해준다.
- 동적 타입 지정 언어? : 타입 관계없이 모든 값을 변수에 넣을 수 있고, 실행 시점에 필드나 메소드에 대한 검증한다. (Groovy, JRuby 등)
정적 타입 지정 언어 장점
- 성능 : 컴파일 시점에 메소드 호출 여부를 알고 있어서 빠르다.
- 신뢰성 : 컴파일러가 컴파일 시점에 프로그램의 정확성을 검증하여 오류로 중단될 가능성 감소
- 유지 보수성 : 객체에 대한 타입을 알고 있어서 쉽다.
- 도구 지원 : IDE의 지원 기능 (IJ)
코틀린은 함수형 프로그래밍을 지원하는 객체지향 프로그래밍
- 일급 시민인(first-class) 함수 : 함수를 변수에 저장할 수 있고, 다른 함수에 함수 인자를 전달할 수 있다.
y = f(x)
y= f(g(x))
- 불변성(immutability) : 객체 생성 후 내부 상태가 바뀌지 않는 객체 사용
- 순수 함수(Pure function) : 입력이 같으면 출력도 항상 같고, 바깥 환경과 상호작용하지 않는 순수 함수를 사용
함수형 프로그래밍의 장점
- 간결성 : 순수 함수를 값처럼 활용하여 강력한 추상화를 할 수 있고, 코드 중복 최소화 (ex. scope function)
- 다중 스레드에 안전(safe multithreading) : 불변데이터 구조를 사용하고 순수 함수를 데이터 구조에 적용하면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다.
- 쉬운 테스트 : 순수 함수는 독립적인 테스트 가능
❗자바도 자바8에서 함수형 프로그래밍 지원
코틀린의 철학
1. 실용성
다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해법과 기능에 의존하여 복잡도를 줄이고, 기존 개념을 통해 쉽게 배울 수 있다.
IDE를 통해 편리한 개발 환경 제공 및 생산성 향상에 기여한다. (간결한 코드로 변경 제안 등등)
2. 간결성
다양한 표준 라이브러리를 제공하여 반복되거나 길어질 수 있는 코드를 줄인다.
컴파일러가 문맥을 고려해 변 수타입을 결정하는 타입 추론 (type inference)
var x: Int = 1
var x = 1
3. 안전성
큰 안전성을 얻기 위해서는 프로그램에 더 많은 정보를 덧붙여야 하므로 생산성이 하락하는 것을 감수해야하는 트레이드 오프 관계
코틀린은 높은 안전성을 달성하되 적은 비용을 지불하고자 하였다.
JVM에서 실행 ( 메모리 안정성 보장, 버퍼 오버플로 방지 등)
null이 될 수 없는 값을 추적하여 NullPointerException 방지
val s: String? = null //nullable
val s2: String = "" //non null
타입 검사와 캐스트가 한 연산자로 가능
if (value is String) // 타입 검사
println(value.toUpperCase()) // 해당 타입의 메소드 사용
4. 상호운용성(interoperability)
자바와 코틀린 코드를 프로젝트에서 원하는 대로 섞어 쓸 수 있는 유연성
따라서 리팩토링에도 용이
코틀린 코드 컴파일
- 코틀린 확장자는 .kt
- 코틀린, 자바 각각의 컴파일러가 바이트 코드(.class) 파일로 만든다.
- 코틀린 런타임 라이브러리 (표준 라이브러리, 자바 API의 확장 기능이 포함된 라이브러리)를 포함하여 Application을 만든다.
- 실제 프로젝트 컴파일을 위해 Maven, Gradle 등의 빌드 시스템 사용
참조 :
코틀린인액션 책
스터디 그룹
반응형
'코틀린 & Java > 코틀린인액션' 카테고리의 다른 글
[Kotlin] 기본 요소 함수와 변수에 대해 알아보자 (1) (0) | 2024.03.19 |
---|---|
[Kotlin] 기본 요소 함수와 변수에 대해 알아보자 (2) (0) | 2024.03.19 |
[Kotlin] 코틀린 함수 정의와 호출 (0) | 2024.03.19 |
[Kotlin] 클래스, 객체, 인터페이스에 대해 알아보자(1) (0) | 2024.03.18 |
[Kotlin] 클래스, 객체, 인터페이스에 대해 알아보자 (2) (0) | 2024.03.18 |