변수 선언하기
// val과 var 변수의 차이
val data1 = 10
var data2 = 10
fun function() {
data1 = 20 // 오류
data2 = 20
}
// 초깃값 할당
val data3:Int // 오류
// 변수 타입 지정과 타입 추론
val data4: Int = 10 // 타입 지정
val data5 = 10 // 타입 추론
- val 또는 var 키워드를 사용하여 변수를 선언
- 초깃값 할당을 해주지 않으면 컴파일 오류
- 초기화를 미루기 위해서는 lateinit, lazy 키워드 이후에 초깃값을 할당할 것임으로 명시적으로 선언해야 한다.
lateinit 키워드 규칙 2가지
- lateinit 은 var 키워드로 선언된 변수에만 사용할 수 있다.
- Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용할 수 없다.
lazy 키워드
val data: Int by lazy {
println("in lazy....")
10
}
fun mainKotlinFunction() {
println("in main....")
println(data + 10)
println(data + 10)
}
[실행 결과]
in main....
in lazy....
20
20
- lazy 키워드는 변수 선언문 뒤에 by lazy { } 형식으로 선언
- 소스에서 변수가 최초로 이용되는 순간 중괄호로 묶는 부분이 자동으로 실행됨
자바와 차이점
// 변수 초깃값 할당
int data1 = 10;
int data2;
void mainJavaFunction() {
data1 = 20;
data2 = 20;
}
// 변수 타입 지정
Integer data3 = 10;
String data4 = "10";
- 변수 선언시 변수 타입을 반드시 지정을 해야 한다
- 변수 선언시 초기값 할당을 하지 않아도 컴파일 오류가 안 난다
- lateinit이나 lazy 같은 초깃값 할당 할 때 사용하는 키워드 없음
데이터 타입
// Int 타입에 null 대입과 메서드 이용
fun someFun() {
var data1: Int = 10
var data2: Int? = null // null 대입 가능
data1 = data1 + 10
data1 = data1.plus(10) // 객체의 메서드 이용 가능
}
- 코틀린의 모든 변수는 객체이다. 따라서 Int는 기초 데이터 타입이 아니라 클래스이다.
- 코틀린에 최상위 클래스는 Any이다. 자바의 Object 클래스와 유사하다.
- 코틀린의 Unit은 반환문이 없는 함수 타입으로 자바의 void 타입과 유사하다.
Nothing - null이나 예외를 반환하는 함수
// Nothing 사용 예
val data1: Nothing? = null
- Nothing으로 선언한 변수에는 null만 대입할 수 있음 => 따라서 Nothing으로 선언한 변수는 데이터로서 의미가 X
// null 반환 함수와 예외를 던지는 함수
fun some1(): Nothing? {
return null
}
fun some2(): Nothing {
throw Exception()
}
자바와 차이점
- 자바와 가장 다른 차이점은 코틀린은 타입에 Null 허용(자바도 초깃값에는 null이 허용)
- Null 허용은 타입 뒤에 물음표를 추가하면 널 허용으로 선언한다.
함수 선언하기
// 함수 선언하기
fun 함수명(매개변수명: 타입): 반환타입 { // 반환타입 명시적으로 선언 안해도 됨
...
}
- 함수의 매개변수에는 기본값을 선언할 수 있다.
- 매개변수에 기본값을 선언했다면 호출할 때 인자를 전달하지 않아도 명시한 기본값이 적용된다.
// 매개변숫값 변경 오류
fun some(data1: Int) {
data1 = 20 // 오류
}
- 함수의 매개변수에는 var나 val 키워드를 사용할 수 없음
- val이 자동으로 적용되며 함수 안에서 매개변숫값을 변경할 수 없다.
// 기본값 활용
fun some(data1: Int, data2: Int = 10): Int {
return data1 * data2
}
println(some(10))
println(some(10, 20))
[실행 결과]
100
200
// 매개변수명을 지정하여 호출
println(some(data2 = 20, data1 = 10))
[실행 결과]
200
- 함수의 매개변수에는 기본값을 선언할 수 있다.
- 매개변수에 기본값을 선언했다면 호출할 때 인자를 전달하지 않아도 명시한 기본값이 적용된다.
- 매개변수 명을 지정할 수 있음 => data1에 10, data2 20
자바와 차이점
// 매개변수 값 변경 가능
void some(int data) {
data = 10;
}
// 기본값 지정 불가
String some2(String data, String data2 = "data2") { // 오류
data = "str";
return data;
}
// 매개변수명을 지정하여 호출 불가
String some2(data2 = "data1", data1 = "data2") // 오류
- 함수 선언 시 함수 타입을 명시해주어야 한다.
- 매개변수 값 변경 가능
- 매개변수 값의 기본값은 없고, 매개변수 명을 지정하여 호출 불가능
컬렉션 타입
Array
선언
val data1:Array<Int> = Array(3, {1})
선언과 동시에 값 할당
val str = arrayOf<String>("a", "b", "c")
컬렉션의 가변 타입과 불변 타입성
구분 | 타입 | 함수 | 특징 |
List | List | listOf() | 불변 |
MutableList | mutableListOf() | 가변 | |
Set | Set | setOf() | 불변 |
MutableSet | mutableSetOf() | 가변 | |
Map | Map | mapOf() | 불변 |
MutableMap | mutableMapOf() | 가변 |
'언어 > Kotlin' 카테고리의 다른 글
Java와 비교하는 Kotlin - 람다 함수와 고차 함수 (0) | 2022.11.05 |
---|---|
Java와 비교하는 Kotlin - 코틀린의 클래스 종류 (0) | 2022.11.05 |
Java와 비교하는 Kotlin - 클래스를 재사용하는 상속 (0) | 2022.11.05 |
Java와 비교하는 Kotiln - 클래스와 생성자 (0) | 2022.11.05 |
Java와 비교하는 Kotlin - 조건문과 반복문 (0) | 2022.11.05 |
댓글