본문 바로가기

Languages/Kotlin

[Kotlin] 1장. 코틀린이란 무엇이며, 왜 필요한가?

코틀린?

 

자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어

간결 & 실용적

자바 코드와의 상호운용성을 중시 ( 현재 자바가 사용 중인 곳이라면 거의 대부분 코틀린 활용 가능 )

기존 자바 라이브러리나 프레임워크와 함께 잘 작동하며, 성능도 자바와 같은 수준이다.

 

 

간단한 코틀린 예시를 보자

 

예시

data class Person(val name:String, // 데이터 클래스
                  val age:Int?=null) // 널이 될 수 있는 타입(int?)과 파라미터 디폴트 값

fun main(args : Array<String>) { //최상위 함수
    
    val persons = listOf(Person("영희"),
                         Person("철수",age=29)) // 이름 붙인 파라미터
    
    val oldest = persons.maxBy{it.age?:0} // 람다 식과 엘비스 연산자
    
    println("나이가 가장 많은 사람 : $oldest"); // 문자열 템플릿
}

// 결과 : 나이가 가장 많은 사람 : Person(name=철수, age=29) 
// toString 자동 생성

 

name, age 라는 데이터 클래스를 정의한다.

age 프로퍼티의 디폴트 값은 널이다. 영희의 나이를 지정하지 않았기 때문에 null이 대신 쓰인다.

리스트에서 나이가 가장 많은 사람을 찾기 위해 maxBy 함수를 사용하고, 함수에 전달한 람다 식은 파라미터를 하나 받는다.

이때 it 이라는 이름을 사용하면 별도로 파라미터 이름을 정의하지 않아도 람다 식의 유일한 인자를 사용할 수 있다.

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

 

 

 

코틀린의 주요 특성

 

코틀린을 활용할 수 있는 영역

  • 서버상의 코드(웹 애플리케이션의 백엔드)
  • 안드로이드 디바이스에서 실행되는 모바일 애플리케이션

 

 

 

정적 타입 지정 언어

Java와 마찬가지로 코틀린도 정적 타입 지정 언어다.

정적 타입 지정이란, 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안엥서 객체의 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻이다.

 

- 성능 : 실행 시점에 어떤 메서드를 호출할지 알아내는 과정이 필요 없으르모 메스트 호출이 더 빠르다.

- 신뢰성 : 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 더 적어진다.

- 유지 보수성 : 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 처음 보는 코드를 다룰 때도 더 쉽다.

- 도구 지원 : 정척 타입 지정을 활용하면 더 안전하게 리팩토링 할 수 있고, 도구는 더 정확한 코드 완성 기능을 제공할 수 있으며, IDE의 다른 지원 기능도 더 잘 만들 수 있다.

 

 

 

타입 추론

코틀린에서는 모든 변수의 타입을 직접 명시할 필요가 없다. 대부분의 경우 코틀린 컴파일러가 문맥에서 변수 타입을 자동으로 유추할 수 있기 때문에 프로그래머는 타입 선언을 생략해도 된다.

 

var x = 1

 

여기서는 변수를 정의하면서 정수 값으로 초기화한다. 코틀린은 이 변수의 타입이 Int 임을 자동으로 알아낸다.

 

코틀린은 타입 추론을 지원하므로 정적 타입 지정 언어에서 프로그래머가 직접 타입을 선언해야 함에 따라 생기는 불편함이 대부분 사라진다.

 

 

함수형 프로그래밍

  • 일급 시민인 함수 : 함수를 일반 값처럼 다룰 수 있다. 함수를 변수에 저장할 수 있고, 함수를 인자로 다른 함수에 전달할 수 있으며, 함수에서 새로운 함수를 만들어서 반환할 수 있다.
  • 불변성 : 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대로 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
  • 부수 효과 없음 : 함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다.

 

 

함수형 프로그래밍의 장점

  1. 간결성 : 함수형 코드는 명령형 코드에 비해 더 간결하다. 함수를 값처럼 활용할 수 있으며 더 강력한 추상화를 할 수 있고 강력한 추상화를 사용해 코드 중복을 막을 수 있다.
  2. 다중 스레드를 사용해도 안전함 : 다중 스레드 프로그램에서는 적절한 동기화 없이 같은 데이터를 여러 스레드가 변경하는 경우 가장 많은 문제가 생긴다. 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면 다중 스레드 환경에서 같은 데이터를 여러 스레드가 변경할 수 없다. 따라서 복잡한 동기화를 적용하지 않아도 된다.
  3. 테스트하기가 쉬움 : 부수 효과가 있는 함수는 그 함수를 실행할 때 필요한 전체 환경을 구성하는 준비 코드가 따로 필요하지만, 순수 함수는 그런 준비 코드 없이 독립적으로 테스트할 수 있다.

 

언어와 관계없이 함수형 스타일을 활용할 수 있지만 모든 언어가 함수형 프로그래밍을 편하게 사용하기에 충분한 라이브러리와 문법 지원을 제공하지는 않는다. 자바 8 이전의 자바에는 함수형 프로그래밍을 지원할 수 있는 기능이 거의 없었다. 하지만 코틀린은 처음부터 함수형 프로그래밍을 풍부하게 지원해준다.

 

- 함수 타입을 지원함에 따라 어떤 함수가 다른 함수를 파라미터로 받거나 함수가 새로운 함수를 반환할 수 있다.

- 람다 식을 지원함에 따라 번거로운 준비 코드를 작성하지 않아도 코드 블록을 쉽게 정의하고 여기저기 전달할 수 있다.

- 데이터 클래스는 불변적인 값 객체를 간편하게 만들 수 있는 구문을 제공한다.

- 코틀린 표준 라이브러리는 객체와 컬렉션을 함수형 스타일로 다룰 수 있는 API를 제공한다.

 

 

 

 

코틀린 예제 연습 사이트

https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS45LjEwIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLyoqXG4gKiBZb3UgY2FuIGVkaXQsIHJ1biwgYW5kIHNoYXJlIHRoaXMgY29kZS5cbiAqIHBsYXkua290bGlubGFuZy5vcmdcbiAqL1xuZnVuIG1haW4oKSB7XG4gICAgcHJpbnRsbihcIkhlbGxvLCB3b3JsZCEhIVwiKVxufSJ9

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

 

'Languages > Kotlin' 카테고리의 다른 글

[Kotlin] 코틀린 기초  (3) 2023.11.14