기타치는 개발자

[Kotlin]코틀린 시작하기 - 코틀린 소개 및 간단한 변수 설명 본문

Kotlin

[Kotlin]코틀린 시작하기 - 코틀린 소개 및 간단한 변수 설명

던킨팬더 2018. 3. 9. 15:44

 코틀린 시작하기

  코틀린은 Google I/O 2017 에서 안드로이드 공식 언어로 채택되면서 세상밖으로 나오게 되었습니다. Kotlin은 IntelliJ IDEA의 개발사인 JetBrains에서 2011년에 개발된 언어로서 JVM에서 구동되며 Java와 100% 호환되며 기존 자바로 개발된 프로젝트에서도 코틀린 코드를 추가 할수도 있고 Android Studio를 사용하여 기존 Java코드를 Kotlin으로 손쉽게 변환할수 있습니다. 

 이번 글에서는 Kotlin의 장단점 및 간단한 변수 및 Java를 기준으로 특징 등을 작성해도록 하겠습니다. 


● Kotlin의 장단점


1. 장점 

- NullPointException 을 줄일수있습니다.

- 기본으로 람다 지원으로 기존 람다를 위한 라이브러리가 필요 없습니다.

- 소스가 간결해 집니다. 

- Extension Function 추가 기능으로 기존 클래스에 함수를 추가해서 사용이 가능합니다. 

- Kotlin-Android-Extension사용으로 기존 findViewById를 사용한 뷰 선언 및 ButterKnife 라이브러리를 사용하지 않아도 됩니다. 




2. 단점

- 기본 Java로 개발했을때보다 빌드 시간이 조금 더 걸린다(조금씩 개선되고 있다고합니다.)



* Kotlin에 대한 단점이 더 많을 것이지만 현재 제가 느낀 단점은 많지않았습니다. 러닝커브도 낮은편이고 소스 포멧이나 기본 사용법이 조금 다른것이 있지만 충분히 학습으로 극복가능할 정도 같습니다. 차후에 더 단점을 느끼게되면 업데이트 하도록하겠습니다.




Kotlin의  특징


1. 변수선언 및 객체 생성

          - Kotlin 은 Swift와 동일하게 타입 추론을 지원합니다
          - 객체 생성시 new 키워드를 미사용
          - 세미콜론(;)은 필수사항이 아닙니다.
          - var(val) 변수명:  타입 = 값 순서로 정의

 Java

Kotlin 

1
2
3
String name = "Ferrari";
 
Car car = new Car(name);
cs

1
2
3
var name = "Ferrari"
 
var car = Car(name)
cs



2. 변수의 불변 여부

           - var과 val로 구분되집니다. var은 변수선언시 final 키워드로 선언한 경우와 동일하며 val은 반대로 final 키워드를 선언한 변수와 
            동일합니다. 
          - Swift의 var, let과  동일합니다. 

 Kotlin

1
2
3
4
5
6
7
var name = "Ferrari"
 
name = "KorandoC"
 
val country = "Korea
//compile Error
country = "Japen"
cs



3.  null 값 선언

    - Java에서는 기본적으로 널 값이 허용되지만 Kotlin에서는 기본적으로 널값을 허용하지 않습니다.

    - null이 허용 가능한 변수는 변수타입 뒤에 ? 로 선언을 해 주게됩니다. 

    - 널값을 컴파일 단계에서 검사해 개발자들이 놓치는 NullPointException 을 줄일 수 있습니다.

  Kotlin

1
2
3
4
 //comlie Error
val name : String = null
    
val country:String= null
cs




4.  함수선언

    - 'fun 함수명( 파라미터명:타입) : 리턴타입'-  순으로 정의 합니다.

    - 리턴값이 없을경우 자바의 void는 Unit 으로 표시하거나 생략할 수 있습니다.

    - 간단한 표현방법으로는 ' fun 함수명( 파라미터명:타입) : 리턴타입 = 리턴값' 처리 부 도 가능합니다

 Kotlin

1
2
3
4
5
6
7
8
9
fun setCarInfo(car:Car): Unit{
 
}
 
fun carInfoMerge(name:String,country:String):String {
        return "$name 's country  is $country"
}
 
fun carInfoMerge(name:String,country:String= "$name 's country  is $country"
cs



5.  반복문

    - 반목문은 Java와 동일하나 forEach 문만 지원하는것이 다름니다.

    - ranges 표현식으로 .. 을 사용하여  시작.. 끝 으로 표현 가능하다 이경우 시작 <= 끝 과 동일합니다.  

    - 역순으로 순서를 주고 싶을경우 downTo를 사용합니다.

 Kotlin

1
2
3
4
for( i in 1..10print(i)  // print 12345678910
 
for( i in 10 downTo 1print(i)  // print 10987654321
 
cs



6.  조건문(when)

    - If문은 Java와 동일합니다.

    - switch 문은 when과 동일하며 break; 구문이 없는것이 특징입니다. 

 Kotlin

1
2
3
4
5
 when(type){
    0 -> Log.e("Type","Type is $type")
    1,2 -> Log.e("Type","Type is $type")
    else -> Log.e("Others Type","Others Type is $type")
}
cs




7.  범위지정 함수 ( let(), apply(), with(), run() )

    - let은 함수를 호출한 객체를 인자로 받아 {} Block내부 에서 사용가능

    - apply는 특정한 객체를 반복하여 사용할경우  반복된 부분을 줄일 수 있습니다. 

    - run는 자바의 익명함수처럼 사용 가능함니다. 

    -  ?을 사용하여 null 체크하여 널 값이 아닐경우에만 블록을 실행시킬수 있습니다. (let(), apply(), run()) 

       하지만 with같은경우는 사용하기전 널값을      

       확인하는 부분이 필요합니다.

    - 눈에 보이는  let, apply, run 의 동작은 비슷하지만 각 함수에 대한 함수 인자 및 리턴값이 다름으로 상황에 맞게 사용해야 될것 같습니다. 

 Kotlin  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
getResources().getDimension(R.dimen.px250).let(){
   sizetextview.maxHeight = it.toInt()
}
 
var parmas = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)
parmas.apply {
   gravity = Gravity.CENTER
   height = 100
   leftMargin = 10
   rightMargin = 100
}
 
 
savedInstanceState?.run {
   statustextview.text = getString("status")?: ""
}
 
 
cs


 간단히 코틀린의 특징과 Java와의 차이점을 알아보았습니다. 기존 Java 개발자라면 별 어려움없이 학습 가능 할것으로 생각됩니다. 다음 글에서는 기존 Java로 작성된 프로젝트를 코틀린으로 변경하는 글을 작성해보도록 하겠습니다.