ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin]무작정 따라하기 1
    Android(+ Kotlin) 2019. 10. 16. 17:53

    https://codelabs.developers.google.com/codelabs/kotlin-bootcamp-basics/#1

     

    Kotlin Bootcamp for Programmers 2: Kotlin basics

    In this task, you learn about booleans and checking conditions in the Kotlin programming language. Like other languages, Kotlin has booleans and boolean operators such as less than, equal to, greater than, and so on (<, ==, >, !=, <=, >=). Write an if/else

    codelabs.developers.google.com

    부트캠프 습득을 통한 인사이트를 공유한다.

     

    먼저 코틀린이 좋다고 생각되는 것.

    1. 구글은 안드로이드의 공식 언어로 코틀을 채택했다.

    2. JDK환경에서 사용되어 자바와 호환성이 좋다.

    3. 구글의 라이브러리를 앞으로 코틀린으로 제공한다.

    4. nullpointexception 관련된 이슈를 줄일 수 있다.

    5. 함수형 프로그래밍이라 코드의 간결성이 높아졌다.(Java도 8부터 람다식 표현 등의 함수형 표현방식을 사용한다. 람다참조글)

     

    * 변수 선언

    자바와는 달리 변수 선언에 있어 var, val을 사용하여 선언이 가능하며, 항상 데이터가 있어야 한다. 

    그래서 변수의 타입을 직관적으로 확인하기 어렵다.( 타입 추론(type inference) 기능이 있다)

    하지만 뒤에서 명시적으로 변수의 타입을 선언이 가능하다.

    var를 통한 타입 선언 방법을 알아보자.

    var helloWorld = "Hello Wrold"
    var helloWorld:String = "Hello Wrold"
    var helloWorld:String? = null
    
    var number = 1
    var number:Int = 1
    var number:Int? = null
    
    var float = 1f
    var flaot: Float = 1.1f
    var flaot: Float? = null
    
    // 기본적으로 double로 잡히며 flaot을 사용하고 싶을 경우 뒤에 숫자 뒤에 f를 붙여주어야 한다.
    
    // 혹시나 float사이즈의 double type을 강제로 대입시키면 타입케스팅 문제가 발생한다.
    
    
    var double = 1.1
    var double: Double = 1.1
    var double: Double? = null
    
    var long = 100_000_000
    var long: Long = 100
    var long: Long? = null
    var long = 100L
    
    print(number.javaClass) // 변수타입 체크 방법

    낮은 숫자의 Long type을 사용할 때 뒤에 L을 붙여 주면 된다.

    숫자가 커질 때 _를 통해 숫자의 자릿수를 쉽게 확인할 수 있다.

    타입을 확인할 때는 [변수].javaClass 사용하면 된다.

     

    위 글에 항상 데이터가 있어야 한다.라는 이야기와 달리 데이터가 없는 변수들이 보인다.

    이것은 nullable이라고 불린다. 명시적으로 데이터 타입을 선언은 했지만 아직 값이 없는 상태이다.

    이런 데이터 타입은 널 체크 로직이 들어가 있지 않으면 사용하기 어렵다.

     

    * var vs val

    var - variable(변수) : 변형(mutable)가능한 변수

    val - value(값) : 불변(immutable)한 변수 (java에서 final 붙인 변수와의 기능이 유사)

     

    val로 선언 후 변경을 시도할 경우 코드상에 빨간 줄이 보일 것이다.(cannot be reassigned)

     

    .times()  곱하기

    .plus() 더하기

    .div() 나누기로 사용 가능

     

    * 두 가지 타입으로 계산을 할 때

    int(4byte), float(4byte), double(8byte), long(8byte)

    * 사이즈가 큰 기준으로 데이터 타입이 지정됨.

     

    * Java String.format()

    갑자기 왜 이런 제목일까 생각이 든다.

    기존에 String type형태로 데이터 확인 및 전달할 때. format을 사용하거나 숫자 타입의 데이터를 스트링 값을 더해 사용되었다.

    하지만 ${데이터}를 통해 쉽게 표시할 수 있다.

    print("calculation print data : ${longNumber - number}")
    print("print number data : $number")

    $를 통해 변수 하나를 사용하거나 중괄호({})를 사용하여 계산식도 표현이 가능하다.

     

    * 조건문의 booleans

    val numberOfFish = 50
    val numberOfPlants = 23
    
    if (numberOfFish > numberOfPlants) 
        println("Good ratio!")
    else println("Unhealthy ratio")

    Java와의 조건문과 같다.

    val fish = 50
    if (fish in 1..100) {
        println(fish)
    }

    이건 조금 다르다.

    "in"과 ".."이라는 값이 들어갔다.

    추후 자세히 다룰 과정이 있을 것 같아서 여기서는 간단한 설명만 한다.

    in - 포함한다면.(String.contains 와 유사)

    1..100 - 앞값(1) 부터 뒷값(100포함)까지

     

    처음에 if문을 배울 때 평균값을 통한 성적 등급을 표시하는 내용을 배운다.

    평균값이 50일 때, 90 이상이면 A, 70 이상이면 B, 50 이상이면 C 그 이하는 D

    val average = 50
    
    if (average >= 90) print("A")
    else if(average >= 70) print("B")
    else if(average >= 50) print("C")
    else print("D")

    이런 식의 올드함을 가졌다. 하지만 코틀린에서는 조금 달라진다. when이라는 함수가 생겼다!

    when(average) {
        in 90..100 -> print("A")
        in 70..89 -> print("B")
        in 50..69 -> print("C")
        else -> print("D")
    }

    생각보단 별 차이가 없어 보이지만, 코드가 더욱 간결해진다.(다른 예제로 할걸...)

    in 90..100 -> print("A")
    in 70..100 -> print("B")
    in 50..100 -> print("C")

    사실 이렇게 써도 된다. 왜냐면 조건문 절차적으로 비교를 하다 보니 선 조건문에 일치된다.

    * switch와 유사하지만 코틀린에서는 when을 사용하며 더욱더 유연하다.

     

    * nullable

    kotlin은 변수가 null이 될 수 없다. 그래서 코틀린은 nullpointexception이 나타날 경우가 없다.(100% 맞는 말은 아니다^^;;)

    하지만 var number: Int? = null 처럼, ?를 붙이고 null로 초기화를 시킨다.

    - 왜 이런 방식을 사용하는가?

    대부분의 변수에 어떤 값이 들어갈지 모르기 때문에 전역이나 지역변수로 선언하여 추후 값을 넣어 사용할 경우가 있다.

    (계속 변경되어야 하는 변수이기 때문에 val에서는 사용할 수 없다.)

    그래서 빈 값의 데이터를 선언하여 사용한다.

     

    선언할 때?를 붙여 선언하듯, 사용할때도 ?를 사용하여야 한다. (print 할때는 크게 필요하지 않는다.)

    선언할때 ?를 붙인 변수를 사용할 때는 항상 if문으로 null인지 한 번 더 체크를 해야 한다.

    var showNull: Int? = null
    
    if(showNull != null) {
        print("${showNull?.dec()}")
    }
    
    // not print...
    
    showNull = 100
    if(showNull != null) {
        print("${showNull?.dec()}")
    }
    
    // print 99

    dec() - 한 단계 줄인다.(-1)

     

    if를 사용하지 않을 경우 첫 번째 방법

    showNull?.dec() ?: 0

     (*띄어쓰기에 주의) showNull?.dec() ? : 0  // ?표 후 띄어쓰기 시 에러가 난다. "?: " 붙여서 사용해야 한다.

     

    if를 사용하지 않는 두 번째 방법

    showData!!.dec()

    !!를 통해 강제로 사용할 수 있다. (주관적으로 절대 null이 아닐 때) nullpointException이 발생할 확률이 증가한다.

    주관적으로 진행할 때 항상 문제가 발생할 확률이 높다. 웬만하면 추천하지 않는다.

     

     

    코틀린

    'Android(+ Kotlin)' 카테고리의 다른 글

    [수정] ViewModel의 ViewModelProvider  (0) 2019.12.30
    MVVM 따라하기 Data Binding, LiveData (1)  (0) 2019.12.20
    [Kotlin]무작정 따라하기3  (0) 2019.11.11
    [Kotlin]무작정 따라하기2  (0) 2019.11.08
    JAVA 용어 정리  (0) 2019.09.20

    댓글

Designed by Tistory.