Boost Course
[코틀린 프로그래밍 기본 1] 2장. 변수와 자료형
kldaji
2021. 7. 17. 17:20
2-1 기본 자료형과 변수 선언방법 (1) 불변형, 기본형
1) val (value) : Immutable
2) var (variable) : mutable
※ 변수 선언 예시
a) val name = "KLDAJI" // Type 추론 가능 = 사용 가능
b) var name // 자료형을 지정해주어야 함. = 사용 불가능
c) val name: String // 사용 전 or 생성자 시점에서 반드시 초기화를 해주어야 함 = 사용 가능
3) 자료형
a) 기본형 : int, float, ...
b) 추론형 : Int, Float, ... (객체)
2-1 기본 자료형과 변수 선언방법 (2) 정수형과 실수형
1) Type 추론
- Short, Byte, Float는 직접 Type을 명시해주어야 한다.
fun main() {
val num1 = 127 // Int
val num2 = -32768 // Int
val num3 = 2147483647 // Int
val num4 = 9223372036854775807 // Long
val exp1 = 123 // Int
val exp2 = 123L // Long
val exp3 = 0x0F // Int -> 16진수
val exp4 = 0b00001011 // Int -> 2진수
}
2) 지수 표현
fun main() {
val exp1 = 3.14E-2 // 왼쪽으로 소수점 2칸 이동, 0.0314
val exp2 = 3.14e2 // 오른쪽으로 소수점 2칸 이동, 314
}
2-1 기본 자료형과 변수 선언방법 (3) 크기 범위와 기타 자료형
1) 자료형의 최댓값 최솟값
fun main() {
println("MAX : ${Int.MAX_VALUE}, MIN : ${Int.MIN_VALUE}")
}
2) 문자열
- String은 String Pool에 저장된다.
fun main() {
val str1: String = "Hello"
val str2 = "Kotlin"
val str3 = "Hello"
// == : 값만 비교
// === : 값과 참조주소 비교 연산자
println("str1 === str2 : ${str1 === str2}")
println("str1 === str3 : ${str1 === str3}")
}
2-2 나를 괴롭히는 널(Null)!
1) 기본적으로 코틀린 변수 선언은 null을 허용하지 않는다.
fun main() {
var str1: String
str1 = "Hello"
println(str1) // Hello
str1 = null
println(str1) // NPE
}
2) null 허용 변수 선언
fun main() {
var str1: String?
str1 = "Hello"
println(str1) // Hello
str1 = null
println(str1) // null
}
3) safe call
fun main() {
var str1: String? // nullable String
str1 = "Hello"
println(str1?.length) // 5
str1 = null
println(str1?.length) // null
}
4) 엘비스 연산자
fun main() {
var str1: String? // nullable String
str1 = "Hello"
var len = str1?.length ?: -1
println(len) // 5
str1 = null
len = str1?.length ?: -1
println(len) // -1
}
2-3 검사와 자료형을 변환해보기
1) 자료형 변환 함수
- 기본형을 사용하지 않고 참조형만 사용하기 때문에 자료형을 변환하고 싶다면 내장된 함수를 사용해야 한다.
fun main() {
val a: Int = 1
val b: Double = a // Error
val c: Int = 1.1 // Error
}
fun main() {
val a: Int = 1
val b: Double = a.toDouble()
// 표현식에서의 자료형은 자동으로 변환된다.
val result = 1L + 3 // Long
}
2) 이중 등호와 삼중 등호
- Int는 참조형 변수이지만, 컴파일 시에 기본형으로 간주되기 때문에 stack에 저장된다.
- Int?는 객체가 되어 heap 영역에 저장된다.
fun main() {
val a: Int = 1 // stack
val b: Int = 1 // stack
println(a == b) // true
println(a === b) // true
val c: Int = 2 // stack
val d: Int? = 2 // heap
println(c == d) // true
println(c === d) // false
}
3) 스마트 캐스트
- Number로 선언된 변수는 숫자 Type으로만 casting이 가능하다.
fun main() {
var test: Number = 12.2 // Double
test = 1 // Int
test = 120L // Long
test = 10.0f // Float
}
4) Any
- 모든 Type으로 casting이 가능하다.
fun main() {
var test: Any = 12.2 // Double
test = 1 // Int
test = 120L // Long
test = 10.0f // Float
test = "Hello" // String
}
2-4 연산자를 조합해 다양한 식 만들기 (2) 비트연산자
/*
* num.shl(bitCount) -> 항상 logical
* num.shr(bitCount) -> arithmetic
* num.ushr(bitCount) -> logical
* num.and(bitCount)
* num.or(bitCount)
* num.xor(bitCount)
* num.inv()
*/