코틀린이란?
- 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어.
- 자바와의 상호운용성을 중시 한다.
- 자바가 사용중이면 거의 대부분 코틀린 사용 가능.
- 서버, 안드로이드 등에서 사용
코틀린 맛보기
data class Person(val name: String, val age: Int? = null)
fun main(args: Array<String>) {
val people = listOf(Person("영희"), Person("철수", age = 29))
val oldest = people.maxBy { it.age ?: 0 }
println("나이가 가장 많은 사람 : $oldest")
}
위의 출력 결과는 아래와 같다.
나이가 가장 많은 사람 : Person(name=철수, age=29)
지난포스팅에서 생각나는대로 Person 클래스를 만들어서 사용했는데 책에서 다루고 있는 예제도 비슷한 느낌이!
위의 코드가 당장이해 안가도 상관없다. 대충 흐름만 파악해보자
1. Person 클래스 생성 (이름과 나이를 받는다)
- 나이는 Int형으로 ? = null 로 초기화가 되어있다. ?의 뜻은 널을 허용한다는 것이고 널을 허용하고 기본 값으로 null을 주었다.
2. main 메소드 생성
3. listOf ( ... ) List에 Person 객체를 넣는다.
- 이때 이상한점이라면 Person에 인자가 2개(name, age) 인데 하나만 넣을수 있다는 것이다.
- 정확히 이야기하면 초기화가 된 age의 값은 생략이 가능하다. 안넣어주면 기본 초기화된 null 값으로 입력이 들어간다.
- 따라서 아래와 같이 찍어보면
println(Person("Dave"))
Person(name=데이브, age=null)와 같이 나온다.
4. people.maxBy { .. } 에서 가장 큰 값을 반환해준다.
해당 람다식이 궁금해서 까보니
public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {
val iterator = iterator()
if (!iterator.hasNext()) return null
var maxElem = iterator.next()
var maxValue = selector(maxElem)
while (iterator.hasNext()) {
val e = iterator.next()
val v = selector(e)
if (maxValue < v) {
maxElem = e
maxValue = v
}
}
return maxElem
}
이렇게 되어있는데 Iterable에서 해당 값을 가지지고 값이 없을때까지 while문을 돌려 가장 큰 값을 반환해준다.
5. 여기서 it은 별도의 파라미터 이름을 정하지 않아도 람다 식의 유일한 인자를 사용할 수 있다.
그리고 ?: 의 의미는 값이 없다면 오른쪽의 값을 0으로 변환해줄때 사용한다.
val oldest = people.maxBy { it.age ?: 0 }
코틀린의 특징
1. 정적타입 지정언어
- 정적 타입 지정이라는 말은 모든 프로그램 구성 요서의 타입을 컴파일 시점에서 알 수 있고, 객체의 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻이다. 그렇다고 모든 언어의 타입을 선언해줘야 하느냐? 그것도 아니다.
var x = 1 이렇게도 사용이 가능하다. 코틀린이 알아서 Int 타입임을 자동으로 추론해준다.
편하지 않은가?
ex)
var name = "Dave" --> String
var age = 1 --> Int
var lat = 0.0 --> Double
val x = 0.0F --> Float
...
2. 함수형 프로그래밍과 객체지향 프로그래밍
- 일급시민인 함수 : 함수를 일반 값처럼 다룰 수 있다. 변수에 저장할 수 있고, 인자로 다른 함수에 전달 할수 있으며, 함수에서 새로운 함수를 만들어서 반환도 가능하다!
- 불변성 : 함수형 프로그래밍에서는 일단 만들어지고 나면 내부 상태가 절대 바뀌지 않는 불변 객체를 사용해 프로그램을 작성한다.
- Side Effect 없음 : 입력이 같으면 항상 같은 출력을 내놓고 다른 객체 상태를 변경하지 않으며, 함수 외부나 다른 바깥 환경과 상호작용하지 않는 순수 함수를 사용한다. 따라서 사이트 이펙트 발생이 없다.
이를 사용하면 어떤 효과가 있을까?
소스를 간결하고 가독성있게 바꿀수 있다.
- 다중스레드에서도 안전하다.
3. 무료 오픈소스
- 코틀린 언어와 컴파일러, 라이브러리 및 코틀린과 관련된 모든 도구는 모두 오픈소스라고 한다!
- 어떤 목적이든 무료로 사용가능!
- 코틀린은 아파치2 라이센스하에 제공된다.
- 개발은 깃헙(https://github.com/jetbrains/kotlin) 코틀린 프로그래밍 커뮤니티 기여에 대해 열려 있다. (여러분도 컨트리뷰트가 될 수 있다)
마치며
https://developer.android.com/index.html
요즘 구글 안드로이드 공식 홈페이지를 가봐도 확실히 코틀린을 밀고 있는 기분이 팍팍 느껴진다.
대문짝만하게 메인 페이지에 이렇게 뙇!
그리고 새로운 기술을 발표하는 비디오 영상에서도 코틀린을 사용할 정도이니
그만큼 매력적인 언어이고, 좋은 언어임에는 틀림없다고 생각한다.
열심히 공부해봐야지 !
'개발 공부 기록하기 > - Kotlin & Java' 카테고리의 다른 글
간단한 Kotlin extension 활용 - 리스트 랜덤값 가져오기 (0) | 2018.10.17 |
---|---|
for, foreach, foreachIndexed 루프탈출 하기 (1) | 2018.05.27 |
Kotlin을 사용하며 느낀점 (7) | 2018.02.18 |
Kotlin을 시작하며 (0) | 2018.02.13 |
지뢰찾기 알고리즘 구현 (0) | 2017.06.16 |