변수와 상수

황승현·2023년 12월 7일
0

코틀린 강의 정리

목록 보기
3/36
post-thumbnail

변수(Variable)

  • 계속 변하는 값이면서, 그 값을 '저장하는 공간'

  • 특정 값을 저장하는 '메모리 공간'을 뜻한다.

변수 선언 (Variable Declarations)

  • var 또는 val 키워드를 붙인다.

  • 코틀린은 자료형을 적지 않아도, 컴파일러가 스스로 자료형을 추론하기 때문에 자료형을 생략할 수 있다.

  • 변수를 초기화하려면 변수 이름 뒤에 =를 붙이고, 할당할 값을 적는다.

  • 변수 초기화 식이 없다면, 변수에 저장될 값에 대한 정보가 없기 때문에 컴파일러가 타입을 추론할 수 없다.

val a = 10 //컴파일러가 자동으로 Int형으로 추론
var b: Int //변수를 선언했지만, 초기화를 하지 않았기 때문에 자료형을 반드시 작성해야 한다.

var

자주 바뀌는 값을 정의할 때 사용 (e.g. 나이)

  • 변수를 뜻하는 variable의 약자로, 변경 가능한 참조를 의미한다.

  • 일반적으로 통용되는 변수

  • 언제든지 값을 읽고 쓸 수 있다. (재할당이 가능하다)

  • Java의 일반 변수에 해당한다.

사용법

  • 변수 이름 앞에 var 키워드를 붙여서 사용한다.
var 변수명1 =//타입을 작성하지 않아도, 컴파일러가 알아서 추론한다.

var 변수명2: 자료형 //변수를 선언했지만, 초기화를 하지 않았다면 반드시 타입을 작성해야 한다.
변수명2 =2

1) 정수

//var a:Int = 10
var a = 10

// 변수는 아래와 같이 재할당이 가능하다.
a = 20

2) 단일 문자 (작은 따옴표로 감쌈)

//var a:Char = 'ㅋ'
var a = 'ㅋ'

// 변수는 아래와 같이 재할당이 가능하다.
a = '크'

3) 문자열 (큰 따옴표로 감쌈)

//var a:String = "ㅋㅋㅋㅋㅋ"
var a = "ㅋㅋㅋㅋㅋ"

// 변수는 아래와 같이 재할당이 가능하다.
a = "크크크크크"

val

변경되지 말아야 하는 값을 정의할 때 사용

  • 값을 뜻하는 value의 약자로, 변경 불가능한 참조를 저장

  • 읽기 전용(Read-only) 지역 변수를 정의할 때 사용하는 키워드

  • 블록을 실행할 때(런타임시) 한 번만 초기화가 가능

  • Java의 final 변수에 해당한다.

  • 코틀린은 기본적으로 모든 변수를 val 키워드를 사용해 불변 변수로 선언하고, 나중에 꼭 필요할 때만 var로 변경하기를 권장한다.

사용법

  • 변수 이름 앞에 val 키워드를 붙여서 사용
val 변수명 =//타입을 작성하지 않아도, 컴파일러가 알아서 추론한다.

val 변수명2: 자료형 //변수를 선언했지만, 초기화를 하지 않았다면 반드시 타입을 작성해야 한다.
변수명2 =2 //이때 초기화가 진행되었으므로, 이제 값을 수정할 수 없다.

1) 정수

//val a:Int = 10
val a = 10

2) 단일 문자 (작은 따옴표로 감쌈)

//val a:Char = 'ㅋ'
val a = 'ㅋ'

3) 문자열 (큰 따옴표로 감쌈)

//val a:String = "ㅋㅋㅋㅋㅋ"
val a = "ㅋㅋㅋㅋㅋ"

if식을 사용하면 조건에 따라 val 변수에 다른 참조를 넣을 수 있다.

val 변수는 변경 불가능한 참조를 저장하기 때문에 블록을 실행할 때 정확히 한 번만 초기화돼야 한다.
하지만 어떤 코드 블록이 실행될 때, 오직 한 초기화 문장만 실행됨을 컴파일러가 확인할 수 있다면 조건에 따라 val 값을 다른 여러 값으로 초기화할 수 있다.

fun main() {
    val text: String //초기화를 수행하지 않음

    val intRange = (1 .. 10)
    var a = intRange.random()
    var b = intRange.random()

    text = if(a>b) "${a}가 더 크다" else "${b}가 더 크다" //if문 결과에 따라 다른 값이 들어간다.
    println("${a}${b} 중에서 ${text}")
}
fun main() {
    val test = "abcsdf"
    val result = when(test.length){ //조건에 따라 다른 문자열이 들어간다.
        in 0..3 -> "짧음"
        4,5,6 -> {"적당함"}
        else -> "길다"
    }
    println(result)
}

val 참조 자체는 불변이지만, 그 참조가 가리키는 객체의 내부 값은 변경될 수 있다.

val test = arrayListOf(1,2,3)
test.add(4)

상수

const val

변경되지 말아야 하는 값을 정의할 때 사용

  • 선언시에만 초기화 가능

  • 컴파일 시 값이 할당된다.

  • 기본 자료형이나 문자열만 선언이 가능하다.

  • 함수 내의 지역변수나, 클래스의 속성으로 사용할 수 없다.

  • 참조 타입으로 선언이 불가능하다. (참조 타입은 런타임 시 객체가 할당됨)

val vs const val

val

  • 런타임시 값이 할당된다.

  • 클래스 생성자에도 사용 가능하다.

const val

  • 컴파일 시 값이 할당된다.

  • 원시 자료형이나 문자열만 선언이 가능하다.

  • 함수 내의 지역변수나, 클래스의 속성으로 사용할 수 없다.

  • 참조 타입으로 선언이 불가능하다.

참고자료

https://kotlinlang.org/docs/basic-syntax.html#creating-classes-and-instances
https://angangmoddi.tistory.com/187
https://angangmoddi.tistory.com/201
https://velog.io/@dabin/Kotlin%EB%B3%80%EC%88%98%EC%84%A0%EC%96%B8-val-var
https://velog.io/@thd0427/Kotlin-const-val%EA%B3%BC-val-Feat.-Companion-Object-Object
https://itstory1592.tistory.com/104

0개의 댓글