일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스프링 스케줄러
- 프로그래머스
- 스프링 부트
- 코딩테스트
- mybatis
- Collections
- Spring
- C++
- pom.xml
- thymeleaf
- 스프링부트
- list
- pair
- Arrays
- @Scheduled
- Dependency
- maven
- HashMap
- java
- codility
- springboot
- 프로젝트 구조
- 스프링 메일
- 스프링
- spring scheduler
- vuejs #vue #js #프론트엔드 #nodejs #클라이언트사이드 #템플릿엔진
- Spring Boot
- GOF
- 의존성관리
- Spring Mail
- Today
- Total
Rooted In Develop
Kotlin - 타입 시스템 본문
널 가능성
fun strLen(s: String) = s.length // null 전달 불가
fun strLen(s: String?) : Int = if (s != null) s.length else 0 // null 전달 가능
- 널이 될 수 있는 값을 널이 될 수 없는 타입의 변수에 대입 불가
- 널이 될 수 있는 타입의 값을 널이 될 수 없는 타입의 파라미터를 받는 함수에 전달 불가
안전한 호출 연산자 : ?.
fun managerName(employee: Employee): String? = employee.manager?.name
엘비스 연산자 : ?:
fun foo(s: String) {
val t: String = s ?: ""
}
- null 대신 디폴트 값을 지정할 때 사용
안전한 캐스트 : as?
- as : 대상 타입으로 캐스팅하는 연산자
- as? : 대상 타입으로 캐스팅 불가시 null 반환
널 아님 단언 : !!
- 어떤 값이든 널이 될 수 없는 값으로 변경
- null 인경우 NullPointException 발생
let 함수
email?.let { email -> sendEmailTo(email) }
- null 이 아닌 경우만 람다식 호출하도록 활용
지연 초기화 (late-initialized)
class MyService {
fun preformAction(): String = "foo"
}
class MyTest {
private lateinit var myService: MyService // lateinit 선언
@Before fun setUp() {
myService = MyService() // 메서드에서 프로퍼티 초기화
}
@Test fun testAction() {
Assert.assertEquals("foo", myService.performAction()) // null 검사 없이 수행
}
}
nullable 객체의 확장 함수
- String? 타입에는 isNullOrEmpty, isNullOrBlank 메서드 존재, 안전한 호출하지 않아도 가능
fun String?.isNullOrBlank(): Boolean = this == null || this.isBlank()
타입 파라미터의 널 가능성
fun <T> printHashCode(t: T) {
println(t?.hashCode()) // 안전한 호출
}
fun <T: Any> printhashCode(t: T) { // null이 될 수 없는 타입
println(t.hashCode())
}
원시 타입
- 정수 타입 : Byte, Short, Int, Long
- 부동소수점 수 타입 : Float, Double
- 문자 타입 : Char
- 불리언 타입 : Boolean
숫자 변환
- 자동 변환 불가
- toByte(), toShort(), toChar() 등의 메소드로 변환 함수가 제공
최상위 타입
- Java의 최상위 타입 : Object
- Kotlin의 최상위 타입 : Any
Unit 타입
- 아무것도 반환하지 않는 타입
- Java의 Void 타입은 null도 포함하기 때문에 항상 return null이 필요함
Nothinig 타입
- 테스트 코드 등에서 예외를 던지는 케이스처럼 정상적으로 종료되지 않을 경우에 명시적으로 선언
컬렉션
- 표준 라이브러리에서 null인 값을 필터링하는 filterNotNull 함수 제공
- kotlin.collections.Collection : 읽기 전용 / size, iterator(), contains()
- kotlin.collections.MutableCollection : 변경 가능 / add(), remove(), clear()
- 컬렉션 생성 함수
컬렉션 타입 | 읽기 전용 타입 | 변경 가능 타입 |
List | listOf | mutableListOf, arrayListOf |
Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf |
Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf |
// Java
interface DataParser<T> {
void parseDate(String input, List<T> output, List<String> errors);
}
// Kotlin
class PersonParser : DataParser<Person> {
override fun parseDate(input: String, output: MutableList<Person>, errors: MutableList<String?>) {}
}
배열
- arrayOf : 입력한 원소를 기준으로 배열 생성
- arrayOfNulls : 입력한 정수 값 기준으로 모든 원소가 null이고 입력한 값의 크기로 배열 생성
- Array 생성자 : 각 원소가 null이 아닌 배열을 만들어야 하는 경우 사용
val letters = Array<String>(26) { i -> ('a'+i).toString() }
val zeros = IntArray(5) // 기본값 0
val zeros = intArrayOf(0,0,0,0,0)
val squares = IntArray(5) { i -> (i+1) * (i+1) }
>>> println(squares.joinToString()) // 1, 4, 9, 16, 25
- 컬렉션을 배열로 변경 : toTypedArray()
val strings = listOf("a", "b", "c")
println("%s/%s/%s".format(*strings.toTypedArray())) // 스프레드 연산자(*)
'Back End > Kotlin' 카테고리의 다른 글
Kotlin - 고차 함수 (0) | 2023.06.03 |
---|---|
Kotlin - 연산자 오버로딩 (0) | 2023.05.27 |
Kotlin - 클래스, 객체, 인터페이스 (0) | 2023.05.01 |
Kotlin - 람다 프로그래밍 (0) | 2023.05.01 |
Kotlin - 함수 정의와 호출 (0) | 2023.04.15 |