코틀린에서 메인 함수는 자바와 달리 클래스 안에 생성하지 않는다.
fun main(){
// 실행 내용
}
변수와 자료형
val과 var
- val : 초기화 후 더이상 변경할 수 없음
- var : 초기화 후에도 값을 바꿀 수 있음
var/val 변수명: 타입 = 값
val number = 10 // number는 Int로 추론
var language = "Korean" // language는 String으로 추론
val secondNumber: Int = 20 // sercondNumber는 자료형을 Int로 명시적으로 지정
var name: String // 초기화하지 앙않으면 타입을 명시해야함
language = "English" // var 선언이므로 변수의 값을 재할당 할 수 있다.
타입은 기본적으로 생략이 가능하다. 코틀린은 타입을 알아서 추론해줌
단, 초기화하지 않고 생성만할 경우엔 타입을 명시해줘야한다.
기본형과 참조형
- 자바는 int, double 등의 기본형과 String, Date 등의 참조형을 모두 사용함
- ## 코틀린은 참조형만 사용함, 하지만 컴파일을 거치면서 참조형을 기본형으로 바꿈
- 기본형 : 메모리(스택)에 값 자체가 들어있으며, 실행시 코드 수행 시간이 더 빠름
- 참조형 : 메모리(스택)에 값을 가리키는 주소가 들어가 있음 (가리키는 값은 힙에 저장돼있다)
문자열에 표현식 사용
var a = 1
val str1 = "a = $a"
val str2 = "a = ${a + 2}" // 문자열에 표현식 사용
println("str1: \\"$str1\\", str2: \\"$str2\\"")
null을 허용한 변수 검사하기
기본적으로 변수에 null 할당을 허용하지 않는다. NotNull
var str1 : String = "Hello Kotlin"
str1 = null // 기본적으로 null을 허용하지 않으므로 에러
타입에 ? 기호를 추가하여 Nullable 타입으로 지정할 수 있다.
var str1 : String? = "Hello Kotlin" // null 허용
str1 = null
println("str1: $str1 length: ${str1.length}") // null일 경우 NPE 발생
Nullable 타입에서 메소드 사용은 세이프 콜(?.) 또는 non-null 단정 기호(!!.)를 사용해야한다.
var str1 : String? = "Hello Kotlin" // null 허용
str1 = null
println("str1: $str1 length: ${str1?.length}") // str1이 null이면 length에 접근하지 않음
println("str1: $str1 length: ${str1!!.length}") // str1이 null이면 NPE 발생
세이프 콜과 엘비스 연산자(?:)를 이용해서 nullable 타입을 안전하게 사용할 수 있다.
?: 는 변수가 null이 아니라면 왼쪽 식을, null이라면 오른쪽 식을 실행한다.
var str1 : String? = "Hello Kotlin"
str1 = null
println("str1: $str1 length: ${str1?.length ?: -1}") // str1이 null이면 -1 실행
자료형 비교, 검사, 변환
자바에서는 자료형이 다르면 자동 변환 되지만, 코틀린에선 변환 함수를 사용해야한다.
val a: Int = 1
val b: Double = a.toDouble() // 변환 메소드 사용
표현식에서 자료형이 다른 경우 범위가 큰 자료형으로 자동 형 변환 된다.
val result = 1L + 3 // Long 형 + Int 형 -> Long 형
이중 등호(==)는 값을 비교하고 삼중 등호(===)는 참조 주소를 비교할 수 있다.
val a: Int = 128
val b = a
println(a === b) // 자료형이 기본형인 int가 되어 값이 동일하기 때문에 true
val c: Int? = a
val d: Int? = a
val e: Int? = c
println(c == d) // 내용만 비교하는 경우 동일하므로 true
println(c === d) // 내용은 같지만 다른 객체(주소 다름)이므로 false
println(c === e) // 내용은 같지만 같은 객체(주소 동일)이므로 true
스마트 캐스트를 이용해서 여러 타입의 값을 저장할 수 있다. 이는 컴파일러가 자동 형 변환을 함
스마트 캐스트가 적용되는 대표적인 자료형으로 Number가 있다.
var test: Number = 12.2 // 12.2에 의해 test는 Float형으로 스마트 캐스트
test = 12 // Int형으로 스마트 캐스트
test = 120L // Long형으로 스마트 캐스트
test += 12.0f // Float형으로 스마트 캐스트
is 키워드를 사용해서 변수의 자료형 알아낼 수 있다. 변수와 타입이 같은지 Boolean 값을 반환
is는 변수를 해당 자료형으로 변환하는 기능도 있음. 검사를 할 때, 스마트 캐스트가됨.
val num = 256
num is Int // true
val x: Any // 코틀린의 최상위 클래스
x is String // x가 String 타입으로 변환됨
as로 스마트 캐스트할 수 있다.
val x: String = y as String // y를 String으로 변환하고 x에 할당
reference : Do it! 코틀린 프로그래밍 2장
'개발 > Kotlin' 카테고리의 다른 글
[코틀린] 함수형 프로그래밍 - 고차 함수, 람다식 (0) | 2021.12.10 |
---|---|
[코틀린] 코틀린 함수 (0) | 2021.12.10 |
코틀린(Kotlin) 스터디 4 - 클래스(Class), 상속(Inheritance) (0) | 2020.01.19 |
코틀린(Kotlin) 스터디 3 - Nullable, 예외처리, 함수 (0) | 2020.01.13 |
코틀린(Kotlin) 스터디 2 - Array, Collection(List, Set, Map) (0) | 2020.01.12 |
댓글