Hello

Kotlin Basic - 변수(variable), val, var

by 볼빵빵오춘기

변수(variable)

  • 값을 저장할 수 있는 공간이다.
  • 공간에는 숫자, 문자, 문자열, 객체 등 다양한 데이터를 담을 수 있다.
  • var, val 변수 선언 시 값을 바꿀 수 있는지 없는지에 따라 결정한다.
  • 코틀린에서는 변수 선언 시 반드시 타입 또는 초기값을 함께 지정해야한다.
    why? 코틀린은 타입 추론(Type Inference) 기능을 갖고 있기 때문에 초기값을 보면 자동으로 타입을 유추할 수 있지만, 아무 정보도 없으면 어떤 타입인지 알 수 없기 때문이다.
// 1. 초기값만 있는 경우 (타입 생략) → 가능 (타입 추론됨)
var name = "Alice"      // 자동으로 String 타입으로 추론
val age = 25            // 자동으로 Int 타입으로 추론
var isKotlinFun = true  // 자동으로 Boolean 타입으로 추론
// 코틀린이 알아서 변수의 타입을 결정한다.

 

// 2. 타입만 지정하고 초기값 없이 선언 → 불가능 (컴파일 에러 발생)
var name : String       // 오류: 초기값 없이 선언할 수 없음
val age : Int           // 오류: 초기화 없이 val 사용 불가

 

// 3. 타입과 초기값을 모두 지정 → 가능
var name : String = "Alice"
val age : Int = 25
// 명시적으로 타입을 써주는 경우도 있다. 
// 가독성을 위해, 또는 타입이 복잡한 경우 자주 사용한다.

 

var, val 변수 선언 키워드

var (mutable variable, 변경 가능)

  • var로 선언한 변수는 값을 나중에 변경할 수 있다.
  • 자바의 일반 변수와 비슷한 개념이다.
var name = "Alice"
name = "Bob"   // 값 변경 가능

 

val (read-only variable, 읽기 전용)

  • val로 선언한 변수는 처음 한 번만 값을 지정할 수 있고, 이후에는 변경할 수 없다.
  • 자바의 상수적인 기질을 갖고 있다.
val age = 20
// age = 25   // 오류 발생: val로 선언한 변수는 값을 바꿀 수 없음

 

cf

1. 코틀린은 원칙적으로 선언과 동시에 초기화해야 하지만, 예외도 있다.

더보기
// lateinit (var만 가능, 클래스 안에서 사용)
lateinit var name: String

fun setup() {
    name = "Alice"  // 나중에 초기화
}

 

// by lazy (val만 가능, 초기화 지연)

val message: String by lazy {
    println("초기화 중...")
    "Hello Lazy"
}

2. 코틀린에서는 데이터 타입에 기본값이 없는가? (자바 vs 코틀린 기본값 비교)

더보기

* 자바에서의 기본값

  • 자바에서는 클래스의 필드(멤버 변수)를 선언하면, 자동으로 기본값이 할당된다.
  • int → 기본값 0, boolean → 기본값 false, Object 기본값 → null ,…

⇒ 자바는 명시적으로 초기화하지 않아도 자동으로 디폴트 값을 준다. (클래스 필드에 한해서)

public class Person {
    int age;  // 자동으로 0으로 초기화됨
}

 

* 코틀린에서의 기본값

코틀린에서는 로컬 변수는 반드시 초기화하고 나서 사용해야 한다.

초기화하지 않으면 컴파일 에러가 발생한다.

⇒ 자바처럼 자동으로 기본값이 들어가지 않는다.

fun main() {
    val age: Int
    println(age)  // 오류: 초기화하지 않아서 사용 불가
}

 

왜 자동으로 기본값을 주지 않을까?

코틀린은 명확하고 안전한 프로그래밍을 지향하기 때문에, 개발자가 명시적으로 값을 설정하도록 요구한다.

이런 규칙 덕분에 널 포인터 예외나 미초기화 오류를 줄일 수 있다.

참고

- https://www.youtube.com/watch?v=xGZqONsfhrI&list=PLilcDFW2bfcouUCLL80-ABoatrcKynq7N&index=7

- https://github.com/chungi21/Kotlin_Basic1/blob/master/src/sec/exam02/exam01.kt

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기