2021.09.29 - [Programing/Android Studio With Kotlin] - Android/ kotlin 코틀린 변수와 함수 정리(1) / 데이터 타입과 문자열, lateinit, lazy등등 # TIL 58
우선 앞서 공부했던 첫번째 글부터 보고 오시면 이해가 빠르실 겁니다.
두번째 공부내용을 정리해보겠습니다.
저번 글에서 코틀린은 기초 데이터 타입이 아닌,
객체 타입이라고 말했습니다.
그럼 어떤 객체 타입을 사용하는 지 알아보겠습니다.
(이 글은 깡샘의 안드로이드 책을 출처로 합니다.)
1. Any - 모든 타입 가능
Any 타입은 코틀린에서 가장 최상위에 있는 클래스 입니다.
모든 코틀린의 클래스는 Any의 하위 클래스로 볼 수 있습니다.
한마디로 Any 타입으로 선언한 변수는 어떤 데이터든 할당할 수 있습니다.
val data1: Any = 10
val data2: Any = "hello"
class User
val data3: Any = User()
2. Unit - 반환값이 없는 함수
자바나 다트에서는 void와 마찬가지인 타입입니다.
Unit 타입으로 선언한 변수에는 Unit객체만 대입할 수 있습니다.
하지만 Unit 타입으로 변수를 선언할 수 있지만 굳이 의미는 없습니다.
반환 값이 어차피 없기 때문입니다.
주로 함수의 반환 타입으로 사용하거나, 반환문이 없다는 것을 명시적으로 표현 할 때,
Unit 타입을 사용합니다.
val data1: Unit {
println(10 + 20)
}
//결과
//30
만약, 함수의 반환 타입을 생략하게 되면 자동으로 Unit타입이 적용이 됩니다.
fun some() { //반환타입을 생략할 경우..
println(10 + 20)
}
//자동으로 Unit 타입이 된다.
//same code
funt some(): Unit {
println(10 + 20)
}
3. Nothing - null이나 예외를 반환하는 함수
Unit과 마찬가지로 의미있는 함수는 아닙니다.
Nothing으로 선언한 변수는 null만 대입할 수 있습니다.
val data: Nothing? = null
데이터로써는 의미는 없지만,
항상 null만 반환하는 함수라던가,
예외를 던지는 함수라면 Nothing으로 선언합니다.
fun some1(): Nothing? {
return null
}
fun some2(): Nothing{
throw Exception();
}
4. 널 허용과 불허용
코틀린의 모든 객체에는 null을 대입할 수 있습니다.
null을 대입할 수 있는 변수(nullable, 널 허용)
null을 대입할 수 없는 변수(not null, 널 불허용)
인지 구분해서 선언해야 합니다.
이와 같은 구분은 타입뒤에 ?(물음표) 표시를 해주면 됩니다.
위에 코드에서 많이 보셨을 겁니다.
타입 뒤에 물음표를 넣어주면 널을 허용한 변수라고 선언하는 것입니다.
var data1: Int = 10
data1 = null // 불가능
var data2: Int? = 10
data2 = null // 가능
5. 함수 선언하기
함수는 보통 => fun 함수명(매개변수명: 타입): 반환 타입 { ... }
으로 되어있습니다.
fun some(data: Int): Int {
retutn data1 * 10
}
함수의 매개변수에는 var나 val을 사용할 수 없습니다.
fun some(var data: Int): Int {} //오류
fun some(val data: Int): Int {} //오류
함수 안에서 매개변수에 값을 변경하고자 하는 것도 되지 않습니다.
매개변수에 자동으로 val가 적용되어 있기 때문입니다.
fun some(data: Int): Int {
data1 = 20 //오류 val가 적용 되어 있다. => "val data1 = 20"와 같은 의미
}
함수의 매개변수는 기본값(default value)를 선언할 수 있습니다.
기본값이 설정된 매개변수는 함수를 선언할 때, 인자를 넣어주지 않아도,
매개변수에 기본 값이 적용됩니다.
fun main() {
fun some(data1: Int, data2: Int = 10): Int {
return data1 * data2
}
println(some(10))
println(some(10, 20))
}
// 결과
// 100
// 200
인자는 순서대로 넣어주어야 합니다.
data1 자리는 매개변수의 첫번째, data2 자리는 두번째 이기 때문에
순서대로 넣어줍니다.
하지만, 이처럼 순서를 지키지 않아도 지정된 매개변수에 값을 넣어주는 방법이 있습니다.
바로
명명된 매개변수(named parameter)입니다.
some(data2 = 20, data1 = 10)
이런식으로 파라미터의 이름을 넣고 이꼬르(=) 값을 넣어주면 됩니다.
그러면 위에 코드값과 똑같이 적용이 됩니다.
여기까지 두번쨰 배운 내용을 정리해 보았습니다.