본문 바로가기
Programming/Kotlin

[ Kotlin ] 코틀린 개요 | Kotlin IN ACTION

by 코뮤(commu) 2021. 10. 4.
728x90
반응형

 

본 포스팅은 Kotlin IN ACTION을 읽은 후의 정리본입니다.

문제 시 댓글로 남겨주세요.

 

 

 

 

 


 

 

 

코틀린이란 무엇인가?

 

코틀린은 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어이다.

자바와의 상호운용성을 중시하기 때문에, 현재 자바를 쓰고 있는 곳에서는 대부분 코틀린을 사용 가능하다.

 

 

 

아래 예제를 살펴보자.

 

 

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")
}

 

 

 

name 과 age 속성이 들어있는 데이터 클래스를 정의했다.

age 속성의 기본값은 null 이다.

 

자바같은 경우에는 일반적인 변수를 선언했을 때, (ex: int a;) 그 변수 안에 null 값이 들어갈 수 있지만

코틀린은 따로 null 이 들어갈 수 있는 변수를 선언해주어야 한다.

 

위의 age 속성에 붙은 Int? 가 그러한 의미를 띄고 있다.

 

main 함수를 살펴보면, persons 라는 리스트를 하나 만들고,

여기서 가장 나이가 많은 사람을 찾기 위하여 maxBy 함수를 사용한다.

maxBy 함수에 전달한 람다 식 안의 it 은 별도로 파라미터 이름을 정의하지 않아도 람다식의 인자를 사용할 수 있따.

우리가 흔히 엘비스 연산자라고 부르는 ?: 는 age 가 null 이면 0을 반환하고, 그렇지 않으면 age의 값을 반환한다.

 

코뮤 같은 경우 age 속성을 따로 지정해주지 않아 값이 null이었지만, 이 엘비스 연산자가

null을 0으로 바꿔주었기 때문에 포은과 비교하여 포은이 가장 나이가 많은 사람이 될 수 있다.

 

 

 

 

코틀린의 대상 플랫폼

 

 

사실 나에게 코틀린은 오라클과의 소송에서 패소한 구글이 이갈고 대체할 걸 만들어버린 언어,, 의 인식이 강하다.

그렇지만 현재 안드로이드 시장에서의 자바의 범용성을 무시할 수는 없기 때문에,

자바보다는 간결하고 코드가 더 단순해진 형태지만 자바를 완벽하게 대체(나는 포함이라고 생각하긴 한다)할 수 있는 언어이지 않을까.

 

책에서는 코틀린의 주목적을 아래와 같이 서술하고 있다.

 

 

현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고
생산적이며 안전한 대체 언어를 제공하는 것.

 

 

자바 뿐만 아니라 자바스크립트로도 코틀린을 컴파일 할 수 있다.

그렇기 때문에 코틀린 코드는 브라우저에서 실행 가능하다.

 

 

 

 

 

코틀린의 핵심 특징

 

정적 타입 지정 언어

 

자바와 동일하게, 코틀린도 정적 타입 저정언어다.

이는 모든 변수 타입을 컴파일 시점에 알 수 있고,

프로그램 안에서 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻이다.

 

컴파일 시에 타입에 대한 정보를 결정하기 때문에서 속도가 빠르고,

타입 에러로 인한 문제점을 초기에 발견할 수 있기 때문에 안정적이다.

 

JVM 에서는 그루비나 JRuby가 대표적인 동적 타입 지정 언어이다.

동적 타입 지정 언어에서는 타입과 관계없이 모든 값을 변수에 넣을 수 있고,

실행 시점에 메소드나 필드 접근에 대한 검증이 일어난다.

 

이로 인해 코드가 더 짧아지고 유연하게 생성할 수 있지만,

컴파일 시 걸러지면 더 편할 오류가 실행시점에 발생하게 되어 위험하다고 할 수 있다.

 

코틀린은 정적 타입 지정 언어이지만, 자바와 달리 모든 변수의 타입을 프로그래머가 직접 명시할 필요는 없다.

대부분 코틀린 컴파일러가 문맥으로부터 변수 타입을 자동으로 유추할 수 있기 때문에

타입 선언을 생략 가능하다.

 

컴파일러가 문맥을 고려하여 변수 타입을 결정하는 기능은 타입추론 이라고 불린다.

 

코틀린의 타입 시스템을 깊게 들어다보면,

이미 자바를 했던 사람들은 알 수 있을법한 내용들이 그대로 들어있는 것을 확인할 수 있따.

클래스의 개념, 인터페이스 , 제네릭 등등 자바와 비슷하다.

 

 

크게 다른 점은, 아까도 잠시 언급했지만 nullable type  을 지원한다는 점이다.

자바는 일반 변수에도 null 을 담을 수 있기 때문에 프로그램 실행 시 null pointer exception 을 계속 마주했었다.

하지만 코틀린은 nullable type을 지원하기 때문에, 프로그램의 신뢰성이 좀 더 높였다고 할 수 있다.

 

또 다른 점은, 함수 타입에 대한 지원이다.

 

 

 

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

 

함수형 프로그래밍의 핵심 개념은 아래와 같다.

 

함수를 일반 값처럼 다룰 수 있다.

함수를 변수에 저장할 수 있고,

함수를 인자로 다른 함수에 전달할 수 있으며 함수에서 새로운 함수를 만들어 반환할 수 있다.

 

 

함수형 프로그래밍에서는 일단 만들어지고 나면

내부 상태가 절대로 바뀌지 않는 불변 객체를 사용하여 프로그램을 작성한다.

 

함수형 프로그래밍에서는 입력이 같으면 항상 같은 출력을 내놓고 다른 객체의 상태를 변경하지 않는다.

또한 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수함수를 사용 한다.

 

 

이렇게 함수형 스타일로 코드를 작성하면,

코드가 간결해지고 다중스레드를 사용해도 안전성이 확보된다.

 

다중 스레드 프로그램에서는 적절한 동기화 없이 같은 데이터를 여러 스레드가 변경하는 경우에

가장 많은 문제가 생기게 된다.

 

그렇지만 이를 불변 데이터 구조를 사용하고 순수 함수를 그 데이터 구조에 적용한다면

다중 스레드 환경일지라도 같은 데이터를 여러 스레드가 변경할 수 없다!

 

이 밖에도 테스트하기 쉽다는 장접도 있다.

부수 효과가 있는 함수는 그 함수를 실행할 때 필요한

전체 환경을 구성하는 셋업 코드를 필요로 하지만, 순수함수는 독립 테스트가 가능하기 때문에 비교적 간단하다.

 

 

 

 

 

오픈소스

 

코틀린 언어 자체와 컴파일러, 도구 등은 모두 오픈소스이다.

코틀린은 아파치2 라이센스 하에 제공된다.

코틀린 어플리케이션을 개발하고 싶다면 인텔리제이사의 IDEA 커뮤니티 버전이나 안드로이드 스튜디오 등을 이용하면 된다.

 

 

728x90
반응형