Kotlin

1. Kotlin 시작하기

pearl.k 2023. 3. 21. 12:19

 

1. 변수 선언

<lateinit>

  • lateinit 으로 선언한 변수는 선언과 동시에 초기값을 할당하지 않아도 괜찮다. 하지만 사용할 수 있는 유형이 한정되어 있다. (ex. String 타입)
  • Int, Long, Short, Double, Float, Boolean, Byte 타입에는 lateinit을 사용할 수 없다.

 

<by lazy>

  • 변수를 선언할 때 val data4: Int by lazy { } 를 사용하면, 나중에 data4가 제일 처음 호출되었을 때, { } 안에 있는게 실행되면서 초기값을 넣어준다.
  • lazy 문의 중괄호 부분을 여러 줄로 작성하면, 마지막 줄의 실행 결과가 변수의 초기값이 된다.
lateinit var data3: String
val data4: Int by lazy{
    println("in lazy......")
    10
}

fun main() {
    val kotlin = "🙂"
    println(kotlin)
    println("in main......")
    println(data4 + 10)
    println(data4 + 10)
    
    var data1: Int = 10
    var data2: Int? = null //물음표, null 대입 가능
    
    data1 = data1 + 10
    println(data1)
    data1 = data1.plus(10)
    println(data1)

}

 

2. Data Type

 코틀린의 모든 변수는 객체: 코틀린의 모든 타입은 객체 타입이다. 정수를 다루는 타입 Int는 기초 데이터 타입이 아니라 클래스이다.

 만약 Int 타입이 기초 데이터 타입이라면 변수에 null을 대입할 수 없고, 메소드 호출도 불가능하다. 하지만 코틀린의 모든 타입은 객체이기 때문에 Int 타입 변수에 null을 대입할 수 있고, 객체의 메소드도 호출할 수 있다.

ex. 위 코드의 var data2: Int? = null    -> 여기서 null 대입이 가능한 것을 볼 수 있다.

 

기초 타입 객체: 기초 데이터를 객체로 표현. Int, Short, Long, Double, Float, Byte, Boolean 이 여기에 속한다.

문자와 문자열: Char, String

  • Char: 코틀린에서는 Char 타입을 number 타입으로 표현할 수 없다. 문자를 작은따옴표(' ')를 사용해서 감싼다.
  • String: 문자열을 큰 따옴표나 삼중 따옴표로 감싸서 표현한다.(" " or " " ")
  • String 타입 데이터에 변수 값이나 어떤 연산식의 결과 값을 포함해야 할 때는 $ 기호를 이용한다.
    • $ 를 "문자열 템플릿" 이라고 한다!
fun main() {
    
    val a1: Byte = 0b00001011
    val a2: Int = 123
    val a4: Short = 123
    val a5: Long = 10L
    val a6: Double = 10.0
    val a7: Float = 10.0f
    
    val a8: Boolean = true
    
    val a: Char = 'a'
    
    val str1 = "Hello \n World"
    val str2 ="""
    	Hello
        World
    """
    println("str1 : $str1")
    println("str2 : $str2")
    
}

 

Any: 모든 타입 가능

  • Any는 Kotlin 최상위 클래스이며, 모든 코틀린의 클래스는 Any의 하위 클래스이다.
  • Any 타입으로 선언한 변수에는 모든 타입의 데이터를 할당할 수 있다.

 

Unit: 반환문이 없는 함수

  • 다른 타입과 다르게, 데이터 형식이 아닌 특수한 상황을 표현하려는 목적으로 사용된다.
  • Unit 타입으로 선언한 변수에는 Unit 객체만 대입 가능
  • Unit 타입은 주로 함수의 반환 타입으로 사용된다. 함수에서 반환문이 없음을 명시적으로 나타낼 때 Unit 타입을 사용한다.
  • 함수 선언 시, 반환 타입을 생략하면 자동으로 Unit이 적용된다.

 

Nothing: null이나 예외를 반환하는 함수

  • Nothing도 특수한 상황을 표현(Unit과 비슷)
  • Nothing으로 선언한 변수에는 null만 대입 가능하다. Nothing으로 선언한 변수는 데이터로서의 의미 x
  • 주로 함수의 반환 타입에 사용한다. 반환은 하지만 의미 있는 값은 아니라는 뜻.
  • 항상 null만 반환하는 함수나 예외를 던지는 함수의 반환 타입을 Nothing으로 선언한다.

 

Null 허용, 불허용

  • 코틀린의 모든 타입은 객체이므로 변수에 null을 대입할 수 있다.
  • null은 값이 할당되지 않은 상황을 의미하는데, 변수를 선언할 때 nullable / not null을 명확하게 구분해서 선언해야 한다. 
  • 변수 선언 시, 타입 뒤에 ? 를 붙여서 nullable 으로 만들 수 있다.

 

fun main() {
    val data1: Any = 10
    val data2: Any = "Hello"
    class User
    val data3: Any = User()
    
    println(data1)
    println(data2)
    some()
    
    var data4: Nothing? = null
    var data5: Int? = 10
    println()
    println(data4)
    println(data5)
    
    data5 = null
    println(data5)
    
}
fun some(): Unit{
    print(10+20)
}

fun some1(): Nothing? {
    return null
}