티스토리 뷰
4개의 글로 커니의 코틀린 2장, 3장 정리를 모두 마쳤다
오늘은 커니의 코틀린 4장 내용인,
개발을 할 때 유용하게 사용할 수 있는 코틀린 표준 라이브러리를 정리해보려고 한다!
조건 확인 함수
특정 값의 일치 여부 확인 : check, require
- check(), require() : 함수 혹은 생성자의 인자로 받은 표현식이 참이 아닌 경우 예외를 발생시키는 함수
//인자로 받은 value 값이 참이 아니라면 IllegalStateException 발생
fun check(value: Boolean)
//인자로 받은 value 값이 참이 아니라면 IllegalArgumentException 발생
fun require(value: Boolean)
//인자로 받은 value 값이 참이 아니라면 IllegalStateException 발생시키며, lazyMessage로 넘겨진 함수 실행
fun check(value: Boolean, lazyMessage: () -> Any)
//인자로 받은 value 값이 참이 아니라면 IllegalArgumentException 발생시키며, lazyMessage로 넘겨진 함수 실행
fun require(value: Boolean, lazyMessage: () -> Any)
- checkNotNull(), reqiuireNotNull() : 특정 값의 널 여부를 확인하고 널이 아닌 값을 반환받음
//value 값이 null이라면 IllegalStateExeption을 발생, null이 아닌 경우 값을 반환
fun <T: Any> checkNotNull(value: T?) : T
//value 값이 null이라면 IllegalArgumentExeption을 발생, null이 아닌 경우 값을 반환
fun <T: Any> requireNotNull(value: T?) : T
//value 값이 null이라면 IllegalStateExeption을 발생시키며 lazyMessage로 받은 함수 실행, null이 아닌 경우 값을 반환
fun <T: Any> checkNotNull(value: T?, lazyMessage: () -> Any) : T
//value 값이 null이라면 IllegalArgumentExeption을 발생시키며 lazyMessage로 받은 함수 실행, null이 아닌 경우 값을 반환
fun <T: Any> requireNotNull(value: T?, lazyMessage: () -> Any) : T
- 사용 예시
//사용 예시
fun showMessage(isPrepared: Boolean, message: String){
//인자로 받은 isPrepared 값이 true가 아니라면, IllegalStateExeption 발생
check(isPrepared)
//값 msg에는 인자로 받은 message 값이 null이 아닐 때만 값 할당
val msg = requireNotNull(message)
//msg의 길이가 10 이상이 아니라면 IllegalArgumentExeption 발생
require(msg.length > 10)
}
명시적으로 실행 중단하기 : error, TODO
- error() : 임의로 에러를 발생시켜 프로그램의 실행을 막는 함수
//인자로 받은 message와 함께 IllegalStateException 발생
fun error(message: String): Nothing
//사용 예시
fun showMessage(isPrepared: Boolean, message: String) {
//인자로 받은 isPrepared가 거짓일 경우, IllegalStateException: Not prepared yet 예외 발생
if(!isPrepared) {
error("Not prepared yet")
}
println(message)
}
- TODO() : 작업이 완료되지 않아 구현이 안된 부분에서 발생하는 버그를 방지하기 위한 함수
//NotImplementedError 예외를 발생시켜 이 부분이 아직 완성되지 않았음을 알려줌
fun TODO(): Nothing
//NotImplementedError 예외를 발생시켜 이 부분이 아직 완성되지 않았음을 알려주며,
//에러 메세지에 표시될 상세 내용을 reason 매개변수로 전달
fun TODO(reason: String): Nothing
//사용 예시
calss Car {
//구현이 완료된 함수
fun drive() {
...
}
//내부 구현이 아직 완료되지 않은 함수, 이 함수 호출 시 NotImplementedError() 발생
fun stop() {
TODO("Brake is not implement")
}
}
컬렉션 생성 함수
배열 (Array)
- 생성 후 크기 변경 불가🚨
- arrayOf() : 특정 원소를 담고 있는 배열 생성
- emptyArrayOf() : 빈 배열 생성
- arrayOfNulls() : 널 값을 포함할 수 있는 배열 생성, 배열 생성 후 값을 따로 채워넣을 수 있음
//함수의 인자로 받은 값으로 구성된 배열 반환, varag는 가변 인자
fun <T> arrayOf(varag elements: T): Array<T>
//특정 타입을 갖는 빈 배열 반환, 타입 추론이 불가능 하므로 타입을 반드시 명시
fun <T> arrayOf(): Array<T>
//배열 내 각 값들이 모두 널 값으로 초기화되어 있고, 인자로 받은 size만큼의 크기를 갖는 배열 반환, 타입 반드시 명시
fun <T> arrayOfNulls(size: Int): Array<T?>
- 사용 예시
//인자로 전달된 문자열을 포함하는 배열 생성, 인자로 타입 추론 가능
val cities = arrayOf("Seoul", "Tokyo", "San Francisco")
//String 타입의 빈 배열 생성, 타입을 반드시 명시
val emptyStringArray = emptyArray<String>()
//크기가 3이고 null을 포함할 수 있는 배열 생성, 타입을 반드시 명시
val nullStoreableArray = arrayOfNulls<String>(3)
리스트 (List)
- 데이터 중복 가능🚨
- listOf() : 포함하는 요소를 읽을 수만 있고 수정할 수 없는 읽기 전용 리스트 생성
//인자로 받은 elements를 포함하는 읽기 전용 리스트 반환
fun <T> listOf(varag elements: T): List<T>
//인자로 받은 element 하나만을 요소로 갖는 읽기 전용 리스트 반환
fun <T> listOf(element: T): List<T>
//비어있는 읽기 전용 리스트 반환
fun <T> listOf(): List<T>
- listOfNotNull() : 인자로 받는 값 중, 널 값은 무시하고 널이 아닌 값으로만 리스트 생성
//인자로 받은 elements 중 널이 아닌 값들로만 구성된 읽기 전용 리스트 반환
//인자로 전달된 모든 값이 null이라면 빈 리스트 반환
fun <T : Any> listOfNotNull(varag elements: T?): List<T>
//인자로 받은 element의 값이 널이 아닌 경우 이 요소 하나만을 갖는 리스트를 반환
//인자로 전달된 값이 null일 경우 빈 리스트 반환
fun <T : Any> listOFNotNull(element: T?): List<T>
- mutableListOf() : 요소를 수정할 수 있는 리스트 생성
//인자로 받은 elements를 요소로 가지며 수정 가능한 리스트 반환
fun <T> mutableListOf(varag elements: T): MutableList<T>
//비어있는 수정 가능한 리스트 반환
fun <T> mutableListOf(): MutableList<T>
- arrayListOf() : 크기 변경이 가능한 배열 생성, arrayOf()와 달리 add() 함수로 원소 추가 가능🚨
//인자로 받은 elements를 요소로 하는 ArrayList를 반환
fun <T> arrayListOf(varag elements: T): ArrayList<T>
//비어있는 ArrayList 반환
fun <T> arrayListOf(): ArrayList<T>
- 사용 예시
//두 개의 원소를 가지는 읽기 전용 리스트 생성
val listOfCountries = listOf("Seoul", "Tokyo")
//null값인 인자는 무시하므로, "Seoul"과 "Tokyo"만을 원소로 가지는 리스트 생성
val listOfCountriesNotNull = listOfNotNull("Seoul", null, "Tokyo", null)
집합 (Set)
- 데이터 중복 불가능🚨
- setOf() : 포함하는 요소를 읽을 수만 있고, 수정할 수 없는 읽기 전용 집합 생성
//인자로 받은 elements들을 요소로 하는 읽기 전용 집합 반환
fun <T> setOf(vararg elements: T): Set<T>
//인자로 받은 element 하나만을 요소로 하는 읽기 전용 집합 반환
fun <T> setOf(element: T): Set<T>
//비어있는 읽기 전용 집합 반환
fun <T> setOf(): Set<T>
- mutableSetOf() : 포함하는 요소를 수정할 수 있는 집합 생성
//인자로 받은 elements들을 요소로 하는 수정 가능한 집합 반환
fun <T> mutableSetOf(vararg elements: T): MutableSet<T>
//인자로 받은 element 하나만을 요소로 하는 수정 가능한 집합 반환
fun <T> mutableSetOf(element: T): MutableSet<T>
맵 (Map)
- '키'는 중복 불가능, '값'은 중복 가능
- mapOf() : 포함하는 요소를 읽을 수만 있고, 수정 불가능한 읽기 전용 맵 생성
//Pair 형태로 받은 인자들을 포함하는 읽기 전용 맵 반환
fun <K, V> mapOf(varag pairs: Pairs<K, V>): Map<K, V>
//인자로 받은 pair 하나만을 요소로 갖는 읽기 전용 맵 반환
fun <K, V> mapOf(pair: Pairs<K, V>): Map<K, V>
//비어있는 읽기 전용 맵 반환
fun <K, V> mapOf(): Map<K, V>
- mutableMapOf() : 맵이 포함하고 있는 요소를 수정할 수 있는 맵 생성
//Pair 형태로 받은 인자들을 포함하는 수정 가능한 맵 반환
fun <K, V> mutableMapOf(varag pairs: Pair<K, V>): MutableMap<K, V>
//비어있는 수정 가능한 맵 반환
fun <K, V> mutableMapOf(): MutableMap<K, V>
- 사용 예시 : ⭐️Pair를 만들 때 표준 라이브러리 내 함수인 to() 사용 가능⭐️
//Pair를 직접 사용
val cities1 = mapOf(Pair("SEO", "Seoul"), Pair("TOK", "Tokyo"))
//to()함수 사용
val cities2 = mapOf("SEO" to "Seoul", "TOK" to "Tokyo")
'Android' 카테고리의 다른 글
[디자인패턴] MVVM 패턴 (MVVM의 구조와 동작, Repository pattern) (0) | 2020.03.22 |
---|---|
[kotlin] 코틀린을 코틀린답게 (라이브러리 - 스트림 함수,범위 지정 함수) (0) | 2020.03.08 |
[kotlin] 안드버디 스터디 정리 - 1 (0) | 2020.03.05 |
[kotlin] 코틀린을 코틀린답게 (함수,람다표현식) (0) | 2020.03.05 |
[kotlin] 코틀린을 코틀린답게 (함수,상속과 구현,this,companion object,제네릭,예외,null 연산자) (0) | 2020.03.04 |