
[Kotlin in Action] 1장을 읽고, 정리한 내용입니다.
⬆️ http://try.kotl.in 입력하면 아래 코틀린 플레이그라운드 링크로 이동함.
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.maxBy { it.age ?: 0 }
println("나이가 가장 많은 사람: $oldest")
}
서버, 안드로이드 등 자바가 실행되는 모든 곳
💡 “정적 타입 지정”
- 모든 프로그래밍 구성 요소의 타입을 컴파일 시점에 알 수 있음
- 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해 줌
↔ 동적 타입 지정
JVM에서는 Groovy, JRuby가 대표적인 동적 타입 지정 언어
- 타입과 관계없이 모든 값을 변수에 넣을 수 있음
- 메소드나 필드 접근에 대한 검증이 런타임에 일어남
- 코드가 더 짧아지고, 데이터 구조를 더 유연하게 생성하고 사용할 수 있음
- 이름을 잘못 입력하는 등의 실수를 컴파일 시 걸러내지 못함 → 런타임에서 오류 발생
정적 타입 지정
| 예시 언어 | C, C++, Java, Kotlin, Swift |
|---|---|
| 특징 / 장점 | - 강력한 타입 체크 → 런타임 오류 가능성을 줄임 - 컴파일 최적화가 용이 - 실행속도가 빠르고 효율적인 프로그램 작성 가능 |
| 사용 분야 | - 대규모 프로젝트 - 애플리케이션 개발 (성능 중요) |
동적 타입 지정
| 예시 언어 | Python, JavaScript, Ruby |
|---|---|
| 특징 / 장점 | - 변수 타입을 런타임에 결정 → 타입 선언이 간결하고, 코드의 양이 작음 - 빠른 프로토타이핑과 스크립팅에 유리 - 타입 변환 유연성↑ → 다양한 타입의 데이터를 쉽게 처리할 수 있음 |
| 사용 분야 | - 작은 규모의 프로젝트 - 데이터 과학, 웹 개발 등 |
참고: https://f-lab.kr/insight/programming-language-type-systems
컴파일러가 문맥을 고려해 변수 타입을 결정하는 기능
var x = 1| 성능 | 실행 시점에 어떤 메소드를 호출할지 알아내는 과정이 필요 없음 → 메소드 호출이 더 빠름 |
|---|---|
| 신뢰성 | 컴파일러가 프로그램의 정확성 검증 → 실행 시 프로그램이 오류로 중단될 가능성↓ |
| 유지보수성 | 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있음 → 처음 보는 코드를 다룰 때 더 쉬움 |
| 도구 지원 | - 더 안전한 리팩토링 - 도구가 더 정확한 코드 완성 기능 제공 가능 - IDE의 다른 자원 기능도 더 잘 만들 수 있음 |
함수형 프로그래밍의 핵심 개념
읽기 전용 프로퍼티 val
Mutable 컬렉션과 read-only 컬렉션 구분
ex) ArrayList ↔ List
data class의 copy()
참고: [Kotlin] 불변성(Immutability)과 가변성(Mutability)
함수형 프로그래밍 장점
fun findAlice() = findPerson { it.name == "Alice" }
fun findBob() = findPerson { it.name == "Bob" }코틀린에서의 함수형 프로그래밍
💡“코틀린은 아래와 같은 함수형 프로그래밍을 지원해요”
- 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있다.
- 람다 식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달할 수 있다.
- 데이터 클래스는 불변적인 값 객체(value object)를 간편하게 만들 수 있는 구문을 제공한다 .
- 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다.

안드로이드 개발에 코틀린을 사용한 예제
코틀린은 자바와의 1) 상호운용성에 초점을 맞춘 2) 실용적이고, 3) 간결하며, 4) 안전한 언어!
💡“프로그래밍 언어가 안전하다” ⇒ 프로그래밍에서 발생할 수 있는 오류 중 일부 유형의 오류를 프로그램 설계가 원천적으로 방지해 줌
NullPointerException? 만 추가하면 됨 val s: String? = null // nullable
val s2: String = ""ClassCastException특정 클래스의 객체를 이와 호환되지 않는 다른 클래스의 객체로 전환하려 할 때 발생하는 에러
코틀린에서는 타입 검사와 캐스트가 한 연산자에 의해 이루어짐
if (value is String) // 타입을 검사
println(value.toUpperCase()) // 해당 타입의 메소드를 사용

.kt 확장자.class 파일 생성