5. 데이터 타입
5.1 기초 데이터 타입
5.1.1 숫자 타입(Int, Long, Short, Double, Float)
- 코틀린에서는 기초 타입 자체가 없다. 코틀린에서 모든 것은 객체(Object)이다.
- 코틀린에서 Characters는 숫자 타입이 아니며, 숫자 타입에 대한 자동 형 변환을 제공하지 않는다.
- 숫자 타입에 대입되는 데이터에 UnderLine을 추가할 수 있다. (1_000_000)
5.1.2 논리, 문자와 문자열 타입(Boolean, char, String)
- String 타입은 문자열 템플릿 개념으로 문자열 내에 변수의 데이터나 특정 연산식 결과에 의한 데이터를 $ 기호로
쉽게 포함할 수 있다.
- $변수, ${연산식}
5.1.3 Any 타입
- 코틀린의 최상위 클래스는 Any이다. 즉 Any는 어떤 타입의 데이터도 대입할 수 있는 타입니다.
- 특정 변수에 대입되는 타입을 예측할 수 없을 때 유용하게 사용할 수 있다.
- 타입 예측(is)에 사용될 때도 있고 when처럼 사용할 때도 있다.
5.1.4 null 허용 타입
- Any 타입도 null을 대입하기 위해서는 '?' 기호를 명시적으로 선언해야 한다.
- 코틀린은 null 사용에 엄격한 문법이 적용되는데, 그 이유는 null에 안전한 프로그램을 작성하고자 하는 것이 목표 중
하나이기 때문이다.
5.1.5 Any, Any? 타입
- Any 타입은 Any? 타입에 대입할 수 있지만, Any? 타입은 Any 타입에 대입할 수 없다.(as 연산자를 이용하여 형 변환)
- 다른 타입도 null에 대해 같은 관계를 갖는다.
5.1.6 Unit과 Nothing
- Unit : 함수의 반환 구문이 없다는 것을 표현하기 위해 사용된다.
- Nothing : 의미 있는 데이터가 없다는 것을 명시적으로 선언하기 위해 사용하는 타입이다.
5.1.7 타입 확인과 캐스팅(is)
- 특정 타입의 데이터인지를 판단할 때 "is" 연산자를 사용한다.
- is 연산자를 이용해 타입을 확인할 때 만약 특별한 타입으로 확인되면 명시적으로 타입 캐스팅을 하지 않아도
자동으로 캐스팅된다.(스마트 캐스팅)
- 코틀린에서는 기초 데이터 타입에 대한 자동 형 변환을 제공하지 않는다. toXXX() 함수를 이용해 진행한다.
5.2 컬렉션 타입
5.2.1 배열(Array)
- arrayOf() 함수를 이용하여 배열 생성
- arrayOf<type>() / XXXArrayOf()를 이용하여 배열 생성
- Array(size, init)를 이용하여 배열 생성
- Array<type> / IntArray 클래스를 이용하여 배열을 생성할 수 있음
- arrayOfNulls(size) : 배열을 null 값으로 초기화하면서 생성
- Array<String>(size, "") : 배열의 초깃값을 빈 상태("")로 대입하여 생성
5.2.2 List, Set, Map
- List : 순서가 있는 데이터 집합. 데이터의 중복 허용
- Set : 순서가 없으며 데이터의 중복을 허용하지 않음
- Map : 키와 값으로(key, value) 이루어지는 데이터 집합. 순서가 없으며 키의 중복은 허용하지 않음
- listOf(), mutableListOf() 대신 ArrayList 클래스를 직접 이용하여 생성할 경우 가변 상태로 이용된다.
ex) var arrayList:ArrayList<String> = ArrayList()
5.2.3 이터레이터(Iterator)
- 컬렉선 타입의 데이터를 hasNext()와 next() 함수를 이용해 차례로 얻어서 사용하기 위한 인터페이스이다.
- List, Map, Set, Array 타입의 데이터 모두 이터레이터 타입의 객체로 변형하여 이용할 수 있다.
ex) val iterator : Iterator<Map.Entry<String,String>> = map.iterator()