코틀린 안드로이드 앱개발 강좌, 코틀린, 널 안전성

코틀린의 널 안전성

코틀린(Kotlin)은 현재 안드로이드 앱 개발에 널리 사용되는 프로그래밍 언어로, 자바의 단점을 보완하고 더 안전한 코드를 작성할 수 있도록 설계되었습니다. 그 중에서도 널 안전성(null safety)은 코틀린의 가장 큰 장점 중 하나로, 개발자가 널 포인터 예외(NullPointerException)에 대한 걱정 없이 코드를 작성할 수 있게 도와줍니다.

널 포인터 예외란?

널 포인터 예외는 프로그램이 `null` 객체에 접근하려고 할 때 발생합니다. 자바에서는 `null` 값을 할당받을 수 있는 변수들이 많아 프로그램에서 자주 발생하며, 이는 치명적인 오류를 초래할 수 있습니다. 예를 들어:


    String str = null;
    int length = str.length(); // 이 줄에서 NullPointerException 발생
    

코틀린의 널 안전성

코틀린에서는 변수가 널(null)을 가질 수 있는지 여부를 명시적으로 정의할 수 있습니다. 기본적으로 모든 변수가 널이 아닐 수 있도록 설정되며, 널을 허용하려면 별도의 구문을 사용해야 합니다.

널을 허용하는 변수 선언

널을 허용하려면 변수 타입에 ? 기호를 추가합니다. 예:


    var name: String? = null  // 널을 허용하는 String 변수
    

널 안전한 호출(?.)과 엘비스 연산자(?:)

코틀린에서는 널 안전한 호출을 위해 ?. 연산자를 사용하여 객체가 널인지 확인한 후 메서드를 호출할 수 있습니다. 만약 객체가 널이면, 메서드는 호출되지 않고 널을 반환합니다.

예를 들어:


    var name: String? = null
    println(name?.length)  // 출력: null
    

또한, 엘비스 연산자(?:)를 사용하여 널일 경우 기본값을 제공할 수 있습니다:


    var length = name?.length ?: 0  // 만약 name이 null이라면, length는 0
    println(length)  // 출력: 0
    

코틀린에서 널 안전성을 활용한 간단한 예제

이번에는 코틀린을 사용한 안드로이드 앱 개발에서 널 안전성을 활용하는 방법을 보여주는 예제를 작성해 보겠습니다. 간단한 사용자 정보를 입력받는 앱을 만들어 보겠습니다.

프로젝트 설정

안드로이드 스튜디오를 열고 새 프로젝트를 만듭니다. “Empty Activity” 템플릿을 선택하고, 코틀린을 선택합니다. 프로젝트 이름은 “UserInputApp”으로 설정합니다.

레이아웃 파일 수정

프로젝트의 res/layout/activity_main.xml 파일을 열고 다음과 같이 수정합니다:


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="16dp">

        <EditText
            android:id="@+id/editTextName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="이름을 입력하세요" />

        <Button
            android:id="@+id/buttonSubmit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="제출" />

        <TextView
            android:id="@+id/textViewResult"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp" />

    </LinearLayout>
    

메인 액티비티 코드 작성

이제 MainActivity.kt 파일을 열고 다음 코드를 작성합니다:


    package com.example.userinputapp

    import android.os.Bundle
    import android.view.View
    import android.widget.Button
    import android.widget.EditText
    import android.widget.TextView
    import androidx.appcompat.app.AppCompatActivity

    class MainActivity : AppCompatActivity() {
        private lateinit var editTextName: EditText
        private lateinit var buttonSubmit: Button
        private lateinit var textViewResult: TextView

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            editTextName = findViewById(R.id.editTextName)
            buttonSubmit = findViewById(R.id.buttonSubmit)
            textViewResult = findViewById(R.id.textViewResult)

            buttonSubmit.setOnClickListener {
                val name: String? = editTextName.text.toString().takeIf { it.isNotEmpty() }
                textViewResult.text = "입력한 이름: ${name ?: "이름이 없습니다."}"
            }
        }
    }
    

결론

코틀린의 널 안전성은 개발자가 코드 작성 시 불필요한 오류를 줄이고, 더 안전한 코드를 작성할 수 있도록 돕습니다. 위의 예제를 통해 널 안전성의 이점을 살펴보았으며, 안드로이드 앱 개발 시 널을 효과적으로 처리하는 방법을 익힐 수 있었습니다. 다음 강좌에서는 코틀린의 고급 기능 및 안드로이드 앱 개발의 다른 측면을 살펴보겠습니다!