1. 변수 선언
<lateinit>
- lateinit 으로 선언한 변수는 선언과 동시에 초기값을 할당하지 않아도 괜찮다. 하지만 사용할 수 있는 유형이 한정되어 있다. (ex. String 타입)
- Int, Long, Short, Double, Float, Boolean, Byte 타입에는 lateinit을 사용할 수 없다.
<by lazy>
- 변수를 선언할 때 val data4: Int by lazy { } 를 사용하면, 나중에 data4가 제일 처음 호출되었을 때, { } 안에 있는게 실행되면서 초기값을 넣어준다.
- lazy 문의 중괄호 부분을 여러 줄로 작성하면, 마지막 줄의 실행 결과가 변수의 초기값이 된다.
lateinit var data3: String
val data4: Int by lazy{
println("in lazy......")
10
}
fun main() {
val kotlin = "🙂"
println(kotlin)
println("in main......")
println(data4 + 10)
println(data4 + 10)
var data1: Int = 10
var data2: Int? = null //물음표, null 대입 가능
data1 = data1 + 10
println(data1)
data1 = data1.plus(10)
println(data1)
}
2. Data Type
코틀린의 모든 변수는 객체: 코틀린의 모든 타입은 객체 타입이다. 정수를 다루는 타입 Int는 기초 데이터 타입이 아니라 클래스이다.
만약 Int 타입이 기초 데이터 타입이라면 변수에 null을 대입할 수 없고, 메소드 호출도 불가능하다. 하지만 코틀린의 모든 타입은 객체이기 때문에 Int 타입 변수에 null을 대입할 수 있고, 객체의 메소드도 호출할 수 있다.
ex. 위 코드의 var data2: Int? = null -> 여기서 null 대입이 가능한 것을 볼 수 있다.
기초 타입 객체: 기초 데이터를 객체로 표현. Int, Short, Long, Double, Float, Byte, Boolean 이 여기에 속한다.
문자와 문자열: Char, String
- Char: 코틀린에서는 Char 타입을 number 타입으로 표현할 수 없다. 문자를 작은따옴표(' ')를 사용해서 감싼다.
- String: 문자열을 큰 따옴표나 삼중 따옴표로 감싸서 표현한다.(" " or " " ")
- String 타입 데이터에 변수 값이나 어떤 연산식의 결과 값을 포함해야 할 때는 $ 기호를 이용한다.
- $ 를 "문자열 템플릿" 이라고 한다!
fun main() {
val a1: Byte = 0b00001011
val a2: Int = 123
val a4: Short = 123
val a5: Long = 10L
val a6: Double = 10.0
val a7: Float = 10.0f
val a8: Boolean = true
val a: Char = 'a'
val str1 = "Hello \n World"
val str2 ="""
Hello
World
"""
println("str1 : $str1")
println("str2 : $str2")
}
Any: 모든 타입 가능
- Any는 Kotlin 최상위 클래스이며, 모든 코틀린의 클래스는 Any의 하위 클래스이다.
- Any 타입으로 선언한 변수에는 모든 타입의 데이터를 할당할 수 있다.
Unit: 반환문이 없는 함수
- 다른 타입과 다르게, 데이터 형식이 아닌 특수한 상황을 표현하려는 목적으로 사용된다.
- Unit 타입으로 선언한 변수에는 Unit 객체만 대입 가능
- Unit 타입은 주로 함수의 반환 타입으로 사용된다. 함수에서 반환문이 없음을 명시적으로 나타낼 때 Unit 타입을 사용한다.
- 함수 선언 시, 반환 타입을 생략하면 자동으로 Unit이 적용된다.
Nothing: null이나 예외를 반환하는 함수
- Nothing도 특수한 상황을 표현(Unit과 비슷)
- Nothing으로 선언한 변수에는 null만 대입 가능하다. Nothing으로 선언한 변수는 데이터로서의 의미 x
- 주로 함수의 반환 타입에 사용한다. 반환은 하지만 의미 있는 값은 아니라는 뜻.
- 항상 null만 반환하는 함수나 예외를 던지는 함수의 반환 타입을 Nothing으로 선언한다.
Null 허용, 불허용
- 코틀린의 모든 타입은 객체이므로 변수에 null을 대입할 수 있다.
- null은 값이 할당되지 않은 상황을 의미하는데, 변수를 선언할 때 nullable / not null을 명확하게 구분해서 선언해야 한다.
- 변수 선언 시, 타입 뒤에 ? 를 붙여서 nullable 으로 만들 수 있다.
fun main() {
val data1: Any = 10
val data2: Any = "Hello"
class User
val data3: Any = User()
println(data1)
println(data2)
some()
var data4: Nothing? = null
var data5: Int? = 10
println()
println(data4)
println(data5)
data5 = null
println(data5)
}
fun some(): Unit{
print(10+20)
}
fun some1(): Nothing? {
return null
}
'Kotlin' 카테고리의 다른 글
[Kotlin Study] 5. 프로젝트 구조 알아보기 (0) | 2023.10.12 |
---|---|
[Kotlin Study] 4. 안드로이드 앱 화면 - 액티비티 컴포넌트 (0) | 2023.10.03 |
[Kotlin Study] 3. 객체지향 프로그래밍의 4가지 특징 (0) | 2023.09.13 |
[Kotlin Study] 2. 컬렉션 (0) | 2023.09.13 |
[Kotlin Study] 1. 기본 코틀린 문법 (0) | 2023.09.13 |