📚 변수


📔정의, 참조, 할당 구분

  • 정의(Declaration): 변수와 상수를 처음으로 만드는 것을 의미
  • 참조(Reference): 만들어진 변수나 상수의 값을 이름으로 조회하는 것을 의미
  • 할당(Assignment): 변수나 상수에 초깃값을 지정하는 것을 의미하며, 재할당은 변수의 값을 바꾸는 것을 의미

📔변수와 상수

📖변수

  • 불변 변수(val): 한번 저장하면 다시 할당할 수 없는 변수
  • 가변 변수(var): 재할당할 수 있는 변수

📖변수 정의

  • 변수 정의 시, 해당 값의 자료형(클래스, 추상 클래스, 인터페이스 등) 지정
  • 자료형으로 지정하지 않을 시, 처음 할당된 값을 보고 자료형을 확정. 두 번째 할당 시, 같은 자료형이 아니면 예외 처리
  • 자료형을 지정할 때에는 변수명 다음에 콜론(:)을 표기한 뒤 자료형을 지정. 이후 할당 연산자를 사용해 초깃값 할당
val 불변변수 = "불변변수" // 한번 초기화 시, 재할당 불가
var 가변변수 = "가변변수" // 초기화 한 후, 항상 재할당 가능

val 변수정의 : String = "초기값"

println(변수정의)
초기값

📖상수

  • 정의 시, 값을 한 번만 할당
  • 패키지나 object 키워드를 사용하는 곳에서만 정의할 수 있음
  • const val 키워드 사용
  • 이름을 모두 대문자로 표시
object ABC {
    const val ABC_CONST = "Hello" // 객체에서 상수 정의 가능, 기본 자료형과 문자열만 가능
}

val abc = ABC
println(abc.ABC_CONST)
Hello

📔식별자 표기법

  • 카멜 표기법(camel notation): 변수 이름의 첫 글자는 소문자로 표기하고 다음 단어의 첫 글자는 대문자로 표기
  • 파스칼 표기법(pascal notation): 단어들의 첫 글자를 대문자로 표기
  • 팟홀 표기법(pothole) / 스네이크 표기법(snake): 단어와 단어를 언더 스코어(_)로 연결해서 표기

📔지역 변수와 전역 변수

📖지역 변수(local variable)

  • 함수 내부나 코드 블록에 정의된 변수
  • 외부에서 참조할 수 없음(클로저 환경 구성 시, 외부에서 접근 가능)
for (i in 1..2) {
    val localVal = 100 // for문 내부에 정의된 변수
    println("for 지역변수 : " + localVal) // localVal 변수는 코드 외부에서 참조 불가
}

fun func() {
    val localLevel : Int // 함수 내부에 정의된 변수
    localLevel = 100
    
    println("함수 지역변수 : " + localLevel) // localLevel 변수는 코드 외부에서 참조 불가
}

func()
for 지역변수 : 100
for 지역변수 : 100
함수 지역변수 : 100

📖전역 변수(global variable)

  • 지역 변수 이외에서 정의된 변수
  • 패키지 단위에 정의된 최상위 변수
  • 동일한 패키지 및 함수에서 항상 참조 가능
val globalLevel = "전역 변수" // 전역 변수

fun funcGlobal() {
    val localLevel: Int // 지역 변수
    localLevel = 100
    println("지역변수 : $localLevel")
    println("전역변수 : $globalLevel") // 전역 변수는 함수 내부에서 참조 가능
}

funcGlobal()
지역변수 : 100
전역변수 : 전역 변수

📔변수 타입 추론과 타입 변환

📖타입 추론(type inference)

  • 객체에 할당된 값을 보고 타입을 결정하는 것
  • 초깃값을 지정할 때 자료형을 명시하지 않을 경우, 지정된 값의 자료형을 자동으로 추론
val number = 100 // 타입 추론
println(number.javaClass.kotlin)

val longNumber = 100L // 타입 추론
println(longNumber.javaClass.kotlin)
class kotlin.Int
class kotlin.Long

📖타입 변환(type conversion)

  • 변수에 정의된 자료형을 상속관계에 맞춰 변경하는 것
  • 숫자나 문자열 자료형의 객체가 아닌 다른 자료형의 객체일 경우, as 키워드를 사용하여 자료형을 변환
var number = 10000
var longNumber = 100L

// longNumber = number <- 오류 발생
longNumber = number.toLong()

// number = longNumber <- 오류 발생
number = longNumber.toInt()

println(number.toByte())
println(number.toShort())
println(number.toLong())
println(number.toFloat())
println(number.toDouble())
16
10000
10000
10000.0
10000.0

서로 다른 정수 자료형 간의 계산 수행 시, 결괏값은 상위 자료형을 가짐

val longNumber = 100L
val number = 100
val addNumber = longNumber + number
println(addNumber)
println(addNumber.javaClass.kotlin)
200
class kotlin.Long