Lined Notebook

[Kotlin] 코틀린 null 처리 및 자료형 변환

by HeshAlgo

1. Null

1 - 1. Null을 허용한 변수 검사

- 변수에 null을 허용하려면 자료형 뒤에 물음표(?) 기호를 명시해야 합니다.

fun main() {
    var str : String? = "Hello Kotlin"
    str = null
    println("str : $str")
}

1 - 2. 세이프 콜(?.)과 non-null 단정 기호(!!.)를 활용하여 null을 허용한 변수 사용

그냥 length를 사용할 경우 빨간줄이 뜨며 아래와 같이 뜰 것입니다.

데이터 타입에 ?를 쓰게 되면 세이콜이나 non-null 단정기호만 이용가능 합니다.

 

세이프 콜(?.)

- null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법

- null이 아닌 경우 그대로 실행이 되고 null인 경우 null을 출력

 

아래와 같이 사용하는것을 권장

print("str: $str length: ${str?.length}") // 세이프 콜로 안전하게 호출

 

non-null 단정기호(!!.)

print("str: $str length: ${str!!.length}") // NPE 강제 발생

 

1 - 3 세이프 콜(?.)과 엘비스 연산자(?:)를 활용한 null을 허용한 변수 사용

엘비스 연산자란?

- 변수가 null인지 아닌지 검사하여 null이 아니라면 왼쪽식을 그대로 실행하고 null이라면 오른쪽 식을 실행

fun main() {
    var str : String? = "Hello Kotlin"
    str = null
    println("str : $str length: ${str?.length ?: -1}")
}

 

2. 자료형 변환

1) 자료형 변환 메서드 이용

코틀린에선 자바처럼 아래와 같이 형변환 할 경우 에러 발생

val a: Int = 1		// int형 변수 a를 선언하고 1을 할당
val b: Double = a	// 자료형 불일치로 오류 
val c: Int = 1.1	// 자료형 불일치로 오류

그렇기 때문에 코틀린에서 자료형을 변환하고 싶다면 자료형 변환 메서드를 이용해야 한다.

val b: Double = a.toDouble()	// 형변환 메서드

만약 자료형이 다른 값을 연산하게 된다면 자료형이 표현할 수 있는 범위가 큰 자료형으로 자동 형 변환하여 연산한다.

val result = 1L + 3		// Long형 + int형 = Long형

 

2) 스마트 캐스트 이용

대표적으로 스마트 캐스트가 적용 되는 자료형은 Number가 존재한다.

fun main() {
    var test: Number = 12.2
    
    test = 12
    println(test)	// int형으로 스마트 캐스트
    
    test = 120L
    println(test)	// Long형으로 스마트 캐스트
    
    test += 12.0f
    println(test)	// Float형으로 스마트 캐스트
}

 

3) 묵시적 변환

자료형이 특별히 정해지지 않은 경우에 Any를 사용한다. 

코틀린의 Any형은 모든 클래스의 뿌리입니다. 우리가 자주 사용하는 Int나 String 등 모두 Any형의 자식 클래스 입니다.

즉, 코틀린의 모든 클래스는 바로 이 Any형이라는 슈퍼클래스를 가집니다.

fun main() {
    var a: Any = 1				// Any형 a는 1로 초기화될 때 int형이 됨
    a = 20L					// int형이 20L에 의해 Long형으로 변환
    print("a: $a type: ${a.javaClass}")		// a의 자바 기본형을 출력하면 long이 나옴
}
fun main() {
    checkArg("Hello")
    checkArg(5)
}

fun checkArg(x: Any) {
	if (x is String) {
    	println("x is String: $x")
    }
    
    if (x is Int) {
    	println("x is Int: $x")
    }
}

 

 

3. 함수 

기본 함수

① fun 키워드로 함수 선언

- 모든 함수는 fun 키워드로 시작

- fun은 function의 줄임말

 

② 함수 이름

- 모든 함수에는 이름이 있으며 함수의 역할에 맞게 이름을 지정

- 함수 이름에 키워드는 피하고 카멜 표기법을 권장

 

③ 매개변수 정의

- 매개변수는 쉼표(,)와 함께 여러 개를 지정할 수 있고 반드시 콜론(:)과 함께 자료형을 명시

 

④ 반환값의 자료형 명시

- 함수가 반환하는 값이 있다면 반환값의 자료형도 반드시 명시

 

⑤ 값 반환

- 함수의 본문에서 어떤 기능을 수행하여 값을 반환할 때는 return 키워드와 함께 반환할 값을 명시

- 만약 반환값이 없다면 생략 가능

 

1) 간략하게 함수 만들기

fun sum(a: Int, b: Int): Int = a + b

위와 같이 return문을 생략하여 작성 가능

fun sum(a: Int, b: Int) = a + b

또는 매개변수가 모두 int형 이므로 더할 값이 int형이면 반환값도 int형이므로 return할 값의 데이터 타입도 생략 가능 합니다.

2) 매개변수 default 설정

함수를 호출할 때마다 중복되는 값을 인자로 넘겨주는 경우가 있는데 이럴경우 매개변수에 기본값을 설정 할 수 있다.

// email의 기본값은 "default"
fun add(name: String, email: String = "default") {
	
}

이렇게 함수를 정의하게 되면 다음 add함수를 호출할 시 인자값을 name만 전달해줘도 email은 "default"로 지정되 함수를 실행 할 수 있다.

 

 

'Language > 코틀린(Kotlin)' 카테고리의 다른 글

Iterator와 Sequence  (1) 2023.11.19
Scope Function  (0) 2021.10.26
[Kotlin] 프로그램 흐름 제어  (0) 2021.03.31

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기