[Kotlin] 변수
📚 변수
📔정의, 참조, 할당 구분
- 정의(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