일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코딩테스트
- 파이썬
- dagger2
- 안정성
- mock
- compose
- 안드로이드
- UnitTest
- Android
- 제한함수
- Kotlin
- ViewModel
- 안드로이드 디자인패턴
- 컴포즈
- 깃
- git
- Jetpack
- 자료구조
- 유닛테스트
- Python
- rxjava
- 디자인패턴
- Observable
- MVVM
- Room
- 코틀린
- 공격적 프로그래밍
- Di
- 테스트의 장점
- 단위테스트
- Today
- Total
세상을 바꾸는 개발자
[이펙티브 코틀린] 코틀린의 안정성 - 적절하게 null 을 처리하라 본문
안드로이드는 자바와 코틀린 2가지 언어로 개발을 할 수 있지만 요즘 자바를 사용해서 개발하는 경우는 찾아보기 힘듬니다
저또한 코틀린을 사용합니다 하지만 사용하면서 잘 몰랐던 부분도 있고 한번도 써보지않는 편리고 좋은 기능들이 많이 존재합니다 그래서 이번에 복습할겸 이펙티브 코틀린의 내용으로 정리를 하려고 합니다.
안정성 - 적절하게 null 을 처리하라
기본적으로 nullable 타입은 세 가지 방법으로 처리한다
- ?., 스마트 캐스팅, Elvis 연산자 등을 활용해서 안전하게 처리한다.
- 오류를 throw 한다
- 함수 또는 프로퍼티를 리펙터링해서 nullable 타입이 나오지 않게 바꾼다
null 을 처리할때 가장 좋은 방법은 스마트캐스팅이나 elvis 연산자를 사용해서 처리하는게 가장 좋지만
require, check 등 공격적프로그래밍 방식으로 개발자에게 처리를 맡겨야 할때도 있음
공격적프로그래밍, 방어적프로그램이란 : https://healthcoding.tistory.com/62
1. 가끔은 not - null assertion (!!) 을 이용해서 처리를 하기도 하는데 이것을 지양하자!
미래에 코드는 어떻게 변화할지 아무도 알 수 없다. !!연산자를 사용하거나 명시적으로 예외를 발생시키는 형태로 설계하면,
미래의 어느시점에서 해당 코드가 오류를 발생 시킬 수 있다는 것을 염두해야 한다
!! 를 피하자
2. 의미 없는 nullability 를 피하자
nullability 는 어떻게는 적절하게 처리해야 하므로, 추가비용이 발생, 필요한 경우가 아니면 nullability 자체를 피하자
nullability 를 피할때 사용할 수 있는 방법
- 클래스에서 nullability 에 따라 여러 함수를 만들어서 제공할 수 있음(ex. list<T> 의 get, getNull 함수 등)
- 어떤 값이 클래스 생성 이후에 확실하게 설정된다는 보장이 있다면 lateinit 프로퍼티와 notnull 델리게이트를 사용
3. lateinit 프로퍼티 와 nonNull 델리케이트를 사용하자
lateinit 의 장점
- !! 연산자로 언팩하지 않아도 됨
- 이후에 어떤 의미를 나타내기 위해서 null을 사용하고 싶을 때 nullable로 만들 수 있음
- 프로퍼티가 초기화된 이후에는 초기화되지 않은 상태로 돌아갈 수 없음
참고 : 이펙티브 코틀린
'안드로이드 > Kotlin' 카테고리의 다른 글
[이펙티브 코틀린] 단위 테스트를 만들어라 (0) | 2023.07.20 |
---|---|
[이펙티브 코틀린] 코틀린의 안정성 - use를 사용하여 리소스를 닫아라 (0) | 2023.07.19 |
[이펙티브 코틀린] 방어적 프로그래밍 vs 공격적 프로그래밍 (0) | 2023.07.17 |
[이펙티브 코틀린] 결과 부족이 발생할 경우 null과 failure를 사용하라 (0) | 2023.07.16 |
[이펙티브 코틀린] 코틀린의 안정성 - 사용자 정의 오류보다는 표준 오류를 사용하라 (0) | 2023.07.15 |