selfstarter

Kotlin 사용법(Kotlin Summary with kotlin tutorial) 본문

App/Android

Kotlin 사용법(Kotlin Summary with kotlin tutorial)

selfstarter 2020. 4. 4. 16:07

Kotlin Summary

Kotlin Tutorial

Benefit of Kotlin

1) Google I/O 2017에서 android의 공식언어로 지정되었고, Google에서 Kotlin 사용을 권장하고 있다(최근 android 예제에아예 JAVA 언어로 된 예제가 없는 경우도 있다)
2) Java에서 Asynctask가 없어졌고, kotlin에서 Coroutine을 사용하여 더 쉽고 간결하게 작업할 수 있다
3) 변수가 NullSafty한지 아닌지를 사용자가 지정하여 예외를 미연에 방지할 수 있다
4) Java와 Kotlin언어 호환 가능

function

  1. Unit은 return value가 없음을 의미한다. Unit을 생략해도 된다

  2. $연산자를 통해 따옴표 안에 메시지를 출력할 수 있다. 또 return 값이 생략되어있으므로 Unit return이다. 함수의 parameter에 기본값을 줘서 parameter를 넘기지 않을 때 기본값을 지정할 수 있다

  3. 두개의 Int parameter를 받고 Int를 return하는 함수이다

  4. 한줄로 처리가 가능하면 함수에 괄호를 치지않고 사용이 가능하다. 이 때 return에 대한 수식만 정의할 수 있다(한줄이라고해서println사용하면에러발생)

    // 1
    fun printString(str : String): Unit {
     println(str)
    }
    //2
    fun printMessageWithPrefix(message: String, prefix: String="Info") {
     println("[$prefix] $message")
    }
    // 3
    fun sum(num1: Int, num2: Int): Int {
     return num1 + num2
    }
    fun multiply(num1: Int, num2: Int) = num1 * num2
    fun main() {
        printString("hihihi")
        printMessageWithPrefix("hi", "Debug")
        printMessageWithPrefix("Debug")
        println(sum(10,20))
        println(multiply(30,40))
    }

Infix function

  • 데이터타입에 function을 추가하는 방식. 아래 예제에서는 String에 onto 라는 function name을 가지는 함수를 선언했다

  • 기존에 function 호출하는 형식(function(param...))과 다르게 두개의 인자 사이에 function을 호출하는 함수

  • String.onto(other: Int)에서 맨 앞에 String은 앞에서 올 데이터의 타입을 가르킨다. String이라고 지정했으므로 infix function 앞에 있는 "Today is"라는 String 데이터 형이 온 것이다

  • String. 다음은 함수 이름이다. 괄호를 사용하지 않는 함수라고 생각하면 된다

  • other: Int는 인자의 데이터 타입이다

  • infix function 안에서 this는 function명 앞에 있는 String을 의미한다("Today is")

      infix fun String.onto(other: Int) = Pair(this, other)
      val myPair = "Today is" onto 4
      println(myPair)
      println(myPair.javaClass.name)
  • infix function to는 Pair Type으로 리턴해준다. to는 우리가 선언하지 않았지만 기본라이브러리에 들어 사용할 수 있다

      var pair = 1 to "hello"
      println(pair)

Operator Functions

  • 연산자를 재정의 할 수 있다
  • 첫번째 예제에서 times는 * 연산자이다
  • 두번째 예제에서 get()은 bracket-access syntax를 사용한다
operator fun Int.times(str: String) = str.repeat(this)
println(2 * "Hello ")

operator fun String.get(range: IntRange) = substring(range)
val str = "Today is Monday~; I'm happy"
println(str[0..20])

vararg parameter

  • vararg parameter는 여러개의 같은 DataType의 변수를 마치 하나의 list 안에 들어가 있는 것 처럼 사용할 수 있다

  • 이 때 parameter는 for문을 돌려야하기 때문에 하나로 통일해야 한다

      fun main() {
           printAll("hi", "방가")
           printAllWithPrefix ("Hello", "Hi", "NicetoMeetyou", prefix="new:")
      }
      fun printAll(vararg message: String) {
           for (m in message) println(m)
      }
      fun printAllWithPrefix(vararg messages : String, prefix : String) {
           for (m in messages) println(prefix+m)    
      }

variable

  • var 자료형은 값을 변화시킬 수 있는 변수이고, val 자료형은 값을 변경할 수 없는 불변성을 가진다

  • 반드시 초기화를 하고 자료형을 사용해야한다. 그렇지 않으면 compile error가 난다

    fun main() {
         var a : Int = 2
         val b : Int = 4
         a = 1
         //b = 2 // immutability-
         println(a)
         println(b)
    
        var num: Int
        println(num)    // error! 
    }

Null Safety

  • 변수 데이터 타입에 ?를 붙이지 않고 그냥 선언하면 null을 사용할 수 없다

  • 변수 데이터 타입에 ?를 붙이면 null을 사용할 수 있다

      fun main() {
        var neverNull : String = "This can't be null"
        neverNull = null
        var nullable : String? = "You can keep a null here"
        nullable = null
        var inferredNonNull = "The Compiler assumes non-null"
        inferredNonNull = null
        fun strLength(notNull : String):Int {
            return notNull.length
        }
    
        strLength(neverNull)
        strLength(nullable)
      }

Class

  • class는 괄호와 body를 생략할 수 있다.

  •  

    new 키워드를 사용하지 않고 객체를 생성할 수 있다

    fun main() {
         var test = Test()
         var user = User(1, "1234")
         println(user.id)
         println(user.pass)
    }
    class Test
    class User(val id: Int, var pass: String)

'App > Android' 카테고리의 다른 글

AnimatedVectorDrawable for Android  (0) 2020.05.17
Android Error NotFoundException String resource ID  (0) 2020.05.06
Android adb command  (0) 2020.04.03
Android apk install  (0) 2020.04.01
Setting String format in Android  (0) 2020.04.01
Comments