본문 바로가기

Dev Book/Kotlin IN ACTION

CH1. 코틀린이란 무엇이며, 왜 필요한가?

코틀린이란?

코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다. 서버 개발, 안드로이드 앱 개발 등의 기존 자바 코드가 사용되었던 분야에 코틀린을 사용할 수 있다.

 

1. 코틀린 맛보기

 

data class Person(var name:String, val age: Int? = null) 

fun main(args: Array<String>) {
	var persons = listOf(Person("영희"), Person("철수", age=29))
    
    var oldest = persons.maxByOrNull(it.age ?: 0)
    
    println("나이가 가장 많은 사람: $oldest")
}

 

결과: 나이가 가장 많은 사람: Person(name=철수, age=29)

- name과 age가 들어간 데이터 클래스를 정의

- age 프로퍼티의 디폴트 값은 따로 지정하지 않은 이상 null. 영희의 나이는 지정하지 않았으므로 null이 쓰임.

- maxByOrNull 함수에 전달한 람다 식은 파라미터를 받는데, it라는 이름을 사용하면 람다 식의 유일한 인자를 사용할 수 있음.

- 엘비스 연산자 ?:는 age가 null인 경우 0을 반환하고, 그렇지 않은 경우 age의 값을 반환.

-> 영희의 나이를 지정하지 않아 null이지만, 엘비스 연산자가 null을 0으로 변화해주어 철수가 가장 나이가 많은 사람으로 선정될 수 있었음.

 


 

2. 코틀린의 주요 특성

- 정적 타입 지정 언어: 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고, 프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다. 하지만 자바와 달리 코틀린에서는 모든 변수의 타입을 프로그래머가 직접 명시할 필요가 없다. 코틀린 컴파일러가 문맥으로 변수 타입을 자동으로 유추할 수 있다고...! 이런 기능을 타입 추론이라고 한다.

 

- 함수형 프로그래밍과 객체지향 프로그래밍

 

함수형 프로그래밍의 핵심 개념

  • first class 함수: 함수를 일반 값처럼 다룰 수 있다.
  • 불변성: 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
  • 부수 효과 없음: 입력이 같으면 항상 같은 출력을 내놓고, 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다.

함수형 스타일로 프로그램을 작성하면? 

1) 간결성: 강력한 추상화를 통해 코드 중복을 막을 수 있다.

2) 다중 스레드를 사용해도 안전하다.

3) 테스트하기 쉽다.

 

  • 코틀린은 함수형 스타일로 프로그램을 짤 수 있게 지원하지만 함수형 프로그래밍 스타일을 강제하지는 않는다. 객체지향과 함수형 접근 방법을 함께 조합해서 사용하면 된다.

3. 코틀린의 철학

  • 실용성
  • 간결성
  • 안전성
  • 상호운용성