android java에서 흔히 발생하는 nullPointException(NPE).
kotlin에서는 널 안전성 연산자를 제공하여 Null값에 대해 사전에 방지가 가능하다.
널 (null)이란 객체가 선언되었지만 초기화되지 않은 상태를 뜻한다.
※ Java NPE 예시
public class MainActivity extends AppCompatActivity {
private String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int length = text.length();
}
}
위 코드에서 text 변수가 초기화되지 않았으므로 NPE가 발생할 수 있다.
※ Kotlin 널 안전성 부여
class MainActivity : AppCompatActivity() {
private var text: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// text 변수가 null인 경우를 처리하기 위해 안전한 호출 ?. 연산자를 사용합니다.
val length = text?.length
// 만약 text가 null이 아닌 경우에만 길이를 출력합니다.
length?.let {
println("Text length: $it")
}
}
}
text 변수에 nullable한 (String?)으로 선언되어 null값을 부여 할 수 있다.
var t1 : String? = "test"
t1 = null // (o)
var t2 : String = "test"
t2 = null // (x)
※ 널 안전성 호출 (?.)
nullable로 선언한 변수는 null을 대입할 경우 NPE(NullPointException)가 발생할 수 있기에 해당 변수에 접근 시 ?.로 접근을 해야한다.
※ 엘비스 연산자 (?:)
?: 를 우측으로 90도 회전하면 엘비스 프레슬리가 된다고 해서 붙여진 엘비스(Evis) 연산자
해당 연산자의 왼쪽 값이 null 이면 우측 값을 반환한다.
var test : String? = "세글자"
Log.d(TAG, "test 문구 글자 수 : ${test?.length ?: -1}")
test = null
Log.d(TAG, "test 문구 글자 수 : ${test?.length ?: -1}")
결과값
test 문구 글자 수 : 3
test 문구 글자 수 : -1
※ 예외 (!!)
!! 연산자는 객체가 널일 때 예외를 일으키는 연산자.
var test : String? = null
Log.d(TAG, "test : ${test!!.length}")
// 결과값
java.lang.NullPointerException: println needs a message
at ...
해당 코드는 NPE를 발생시킨다. 특정 사항이 아니라면 사용하는 것을 지양한다.
'- Android > Kotlin' 카테고리의 다른 글
[Android][kotlin] Jetpack Compose 기본 설정 (+ render problem 해결방법) (0) | 2024.06.16 |
---|---|
[Android][Kotlin] Press the back key twice to exit (0) | 2024.05.15 |