Android(Kotlin)

Kotlin 기초 컬렉션 타입의 자료형과 null 타입, 아무것도 반환하지 않는 타입

coke-dev 2023. 12. 10.

지난 포스팅에서는 코틀린에서 사용하는 기본 자료형에 대해 알아보았습니다. 숫자, 문자, 문자열, 배열등을 다루는 자료형에 대해 알아보았으니 이번 포스팅에서는 컬렉션 타입, null 타입, 아무것도 반환하지 않는(void) 타입에 대해 알아보겠습니다.

코틀린 기본 자료형 확인하기

코틀린 사용환경 세팅하기

컬렉션 타입 (Collection Types)

코틀린의 컬렉션은 주로 List, Set, Map 세 가지로 구분됩니다.

 

List: 순서가 있는 요소들의 집합. 중복된 요소를 허용합니다.
listOf, mutableListOf 등으로 생성할 수 있습니다.

fun main() {
    // 불변 리스트 생성
    val immutableList = listOf(1, 2, 3, 4, 4)  // 중복된 요소 포함
    println("Immutable List: $immutableList")

    // 가변 리스트 생성 및 요소 추가
    val mutableList = mutableListOf(1, 2, 3)
    mutableList.add(4)  // 요소 추가
    println("Mutable List: $mutableList")
}

 


Set: 중복된 요소를 허용하지 않는 요소들의 집합. 순서는 보장되지 않습니다.
setOf, mutableSetOf 등으로 생성할 수 있습니다.

fun main() {
    // 불변 세트 생성
    val immutableSet = setOf(1, 2, 3, 3)  // 중복된 요소가 제거됨
    println("Immutable Set: $immutableSet")

    // 가변 세트 생성 및 요소 추가
    val mutableSet = mutableSetOf(1, 2, 3)
    mutableSet.add(4)  // 요소 추가
    println("Mutable Set: $mutableSet")
}

 


Map: 키와 값의 쌍으로 이루어진 요소들의 집합. 키는 중복될 수 없지만, 값은 중복될 수 있습니다.
mapOf, mutableMapOf 등으로 생성할 수 있습니다.

fun main() {
    // 불변 맵 생성
    val immutableMap = mapOf(1 to "a", 2 to "b", 3 to "c")
    println("Immutable Map: $immutableMap")

    // 가변 맵 생성 및 요소 추가
    val mutableMap = mutableMapOf(1 to "a", 2 to "b")
    mutableMap[3] = "c"  // 새로운 키와 값 추가
    println("Mutable Map: $mutableMap")
}

 

 

널 가능 타입 (Nullable Types)

코틀린은 널 가능성을 타입 시스템에 통합시켜 널 참조 오류를 방지하는 데 도움을 줍니다. 타입 뒤에 ?를 붙이면 해당 타입의 변수가 널을 가질 수 있음을 나타냅니다.

 

예: String?은 널이 될 수 있는 문자열 타입입니다.
널 가능 타입의 변수를 사용할 때는 안전한 호출(?.), 엘비스 연산자(?:), 또는 강제 널 체크(!!)를 사용하여 널 처리를 할 수 있습니다.

fun main() {
    val nullableString: String? = "Kotlin"  // 널이 될 수 있는 문자열

    // 안전한 호출 사용 (?.)
    // nullableString이 널이 아니면 길이를 반환하고, 널이면 널을 반환한다.
    val length: Int? = nullableString?.length
    println("Length: $length")

    // 엘비스 연산자 사용 (?:)
    // nullableString이 널이 아니면 그대로 사용하고, 널이면 기본값(0)을 사용한다.
    val safeLength: Int = nullableString?.length ?: 0
    println("Safe Length: $safeLength")

    // nullableString에 널을 할당
    val nullString: String? = null

    // 강제 널 체크 사용 (!!): 널이 아닌 것으로 강제 처리
    // 주의: nullString이 널이므로 이 코드는 NullPointerException을 발생시킨다.
    // val unsafeLength: Int = nullString!!.length  // 주석 처리: 실제로 실행하면 예외가 발생한다.

    // 위의 강제 널 체크 예시는 위험하므로 실행하지 않는 것을 추천합니다.
    // 대신 아래의 안전한 처리 방법을 사용하세요.
    try {
        val unsafeLength: Int = nullString!!.length
        println("Unsafe Length: $unsafeLength")
    } catch (e: NullPointerException) {
        println("NullPointerException caught!")
    }
}

 

 

아무 것도 반환하지 않는 타입 (Unit and Nothing)

코틀린에서는 반환 값이 없는 함수의 타입을 Unit으로 표현합니다. Unit은 자바의 void에 해당합니다. 일반적으로 Unit 반환 타입은 생략할 수 있습니다.

 

Unit: 함수가 아무것도 반환하지 않을 때 사용합니다. 명시적으로 사용할 필요는 없지만, 필요에 따라 사용할 수 있습니다.

 

fun printMessage(message: String): Unit {  // Unit은 생략 가능
    println(message)
}

fun main() {
    printMessage("Hello, Kotlin!")  // "Hello, Kotlin!" 출력
}

 

 

Nothing: 함수가 정상적으로 종료되지 않는다는 것을 나타내는 타입입니다. 예를 들어, 함수가 항상 예외를 던지거나 무한 루프에 빠질 때 사용합니다.

fun fail(message: String): Nothing {
    throw IllegalStateException(message)
}

fun main() {
    fail("Something went wrong")  // IllegalStateException을 던짐
}

 

 

 

 

이렇게 코틀린에서 사용하는 컬렉션 타입, null 타입, 아무것도 반환하지 않는 타입에 대해 알아보았습니다.

다음시간에는 덧셈, 뺄셈, 곱셈, 나눗셈을 하는 방법을 알아보고 함수로 만들어서 사용을 해보겠습니다.

 

 

댓글

💲 추천 글