Kotlin/Kotlin 입문

[Kotlin] 2. 변수

JoonYong 2024. 9. 30. 00:09

1. 변수

  • 변동이 심한, 가변적인, 변할 수 있는 숫자를 말합니다.
  • 프로그래밍에서 말하고 싶은 변수의 뜻은 가변할 수 있는 값을 저장할 수 있는 저장공간입니다.
  • 프로그램을 만드는 주재료가 됩니다.

2. 변수 선언 기본 형태

var/val 변수명: 변수타입 = 초기화값

fun main() {
    println("Hello, World!")

    // var/val 변수명: 변수 타입 = 초기화값
    var name: String = "박준용" // 변동 불가능
    val age: Int = 26           // 변동 가능
    val alive: Boolean = true   // 변동 가능

}

val(Immutable: 불변의) - 읽기

  • val 로 선언된 변수는 초기에 값을 할당하면 더이상 값을 변경할 수 없습니다.
  • 읽기만 가능한 변수입니다.

var(Mutable: 변하기 쉬운) - 읽기/쓰기

  • var 로 선언된 변수는 값의 변경이 가능합니다.
  • 그러나, 다른 타입의 값을 넣을 수 는 없습니다.
  • 읽기/쓰기가 가능한 변수입니다.

변수명

  • 변수명은 변수의 목적에 맞게 본인이 마음대로 정할 수 있습니다.
  • 가끔 이미 코틀린(Kotlin)에서 사용되고 있는 예약어(ex. val , in, for, if 등)를 변수에 사용해야 될 경우가 있습니다.
  • 변수명을 변경할 수도 있지만 반드시 사용해야되는 경우 ```를 변수 양쪽에 위치 시키면 됩니다.
fun main() { 
    val in: Int = 0 // 컴파일 에러 
    val `in`: Int = 0 // 정상 동작
}

컴파일 에러 Kotlin: Expecting property name or receiver type

  • 숫자로 시작할 수 없습니다.
숫자로 시작할 수 없습니다.fun main() {
    var 1st: Int // 컴파일 에러
    var first1: Int // 정상 동작
}

변수 초기화

  • 변수의 초기화 값을 넣지 않고 사용할 경우 다음과 같은 문제가 발생합니다.
fun main() {
    var age: Int
    println(age) // 컴파일 에러 발생

    var score: Int
    score = 30
    println(score) // 정상 동작
}

컴파일 에러 Kotlin: Variable 'a' must be initialized

3. 변수타입

Integer types(정수형)

  • 정수형을 표현하는 변수타입은 총 4가지 있습니다.
  • 사이즈에 따라 다릅니다. 이는 표현할 수 있는 숫자의 범위가 다릅니다.
  • 주로 Int 를 사용하나 숫자 범위를 넘게되면 Long 도 같이 사용합니다.
변수 타입 사이즈(bits) Min Value Max Value
Byte 8 -128 127
Short 16 - 32,768 32,767
Int 32 -2,147,483,648 2,147,483,647
Long 64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

 

fun main() {
    val one = 1 // Int
    val threeBillion = 3000000000 // Long
    val oneLong = 1L // Long
    val oneByte: Byte = 1
    val threeBillionUnderbar = 3_000_000_000
}

Floating-point types(실수형)

  • 실수형을 표현하는 변수타입은 총 2가지 있습니다.
  • Float는 표현 길이가 낮아 주로 Double을 사용합니다.
변수 타입 사이즈(bits)
Float 32
Double 64
val pi = 3.14 // Double
// val one: Double = 1 // Error: type mismatch
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, actual value is 2.7182817

Boolean

true or false

String

  • 문자열을 담을 때 사용되는 변수타입입니다.
fun main() {
    val name: String = "박준용"
}
  • 문자열( String ) 사이에 변수를 사용 할 수 있습니다.
fun main() {
    // 예시 1
    val name: String = "박준용"
    println("이름은 ${name}입니다")
    // 예시 2
    val age: Int = 26
    val result: String = "이름은 ${name}이고 나이는 ${age}입니다"
    println(result)
}

4. Null Safety

변수 선언시 변수타입 바로 뒤에 ? 를 선언하면 nullable한 변수가 됩니다.

fun main() {
    var name: String = "박준용"
    name = null // 컴파일 에러 발생
    var nullableName: String? = null
    val length = nullableName.length // 컴파일 에러 발생
}
  • nullable한 변수를 사용할 때 이 변수가 null 인지 아닌지 고려하며 사용해야 합니다.

1. 조건문을 통해 null 확인하기

fun main() {
	var name: String? = null
	if (name != null) {
		println(name.length)
	}
}

 

2. ?. 연산자를 통해 안전하게 호출 name 이 null 이면 null 값을 반환하고 아니면 name 변수의 길이를 반환합니다.

fun main() {
	var name: String? = null
	println(name?.length)
}

 

3. ?: 엘비스 연산자(Elvis Operator) 변수가 null 일 경우 값을 지정할 수 있습니다.

fun main() {
	var name: String? = null
	val length: Int = name?.length ?: 0
	println(length)
}

 

4. !! 연산자 개발자가 null 이 아니라고 강제로 지정하는 경우입니다. 사용하지 않기를 권장합니다.

fun main() {
	var name: String? = null
	println(name!!.length)
}

주의) 런타임에서 !! 로 지정한 변수가 null 일 경우 NullPointException 에러를 던집니다.