3. 데이터 타입
1) 기본
- 코틀린에서는 기초 타입이 없고 모든 타입이 객체 형태이다.
- 타입 클래스에 정의된 기초 함수와 프로퍼티를 사용할 수 있다.
- Any는 코틀린의 최상위 클래스이기 때문에 어떤 타입의 데이터도 대입할 수 있다.
- 타입 종류: Int, Double, Float, Long, Short, Byte, Char, Boolean, String, Any, Unit, Nothing
2) 숫자 타입
- Number 클래스의 서브클래스: Int(32), Long(64), Float(32), Double(64), Short(16), Byte(8)
- 자동 형 변환을 제공하지 않는다.
- Decimals, Hexadecimals, Binaries 값 대입 가능
- Long 형은 값 뒤에 'L' 사용 (ex. 10L)
- 실수 기본형은 Double
- 실수형은 10.0e2로도 표현 가능
- Float 형은 값 뒤에 'f', 'F' 사용 (ex. 10.0f)
- 숫자 타입을 읽기 편하게 밑줄 사용 가능하며 값에는 영향을 주지 않는다. (ex. 1_000_000)
3) 논리 타입
- Boolean: true, false를 구분하기 위한 타입
- 논리 연산자
||: 논리합(or)
&&: 논리곱(and)
!: 부정(not)
4) 문자와 문자열 타입
- Char: 문자를 표현하는 타입(Number 타입이 아니라서 숫자로 연산 불가)
ex) 'A' / 'b'
- String: 문자열을 표현하는 타입(배열 형태로 접근 가능한 Char의 집합)
fun main() {
val str: String = "ABCDE"
println(str[0]) // A
println(str[3]) // D
}
- raw string: 큰따옴표 세개를 사용해서 표현하며 엔터 등의 값이 적용된다.
fun main() {
val str: String = """
안녕??
반가워~"""
println(str)
}
// 결과
안녕??
반가워~
- 문자열 템플릿: '$' 기호를 이용해서 문자열 내에 변수 혹은 연산 내용을 입력하는 방식
fun main() {
val name = "Wickies"
var count = 1
fun counter() = count ++
for (i in 1..5)
println("${counter()}번째 인사: 안녕? 내 이름은 $name")
}
// 결과
1번째 인사: 안녕? 내 이름은 Wickies
2번째 인사: 안녕? 내 이름은 Wickies
3번째 인사: 안녕? 내 이름은 Wickies
4번째 인사: 안녕? 내 이름은 Wickies
5번째 인사: 안녕? 내 이름은 Wickies
5) 타입 확인
- is 연산자를 사용하며 타입이 확인될 경우 해당 타입으로 자동 형변환 된다.
- !is의 형태로 Not을 추가할 수 있다.
fun checkType(data : Any){
if(data is Int)
println("연산 전: $data / 연산 후: ${data.times(-1)}")
else if(data is String)
println("연산 전: $data / 연산 후: ${data.toUpperCase()}")
else if (data is Boolean)
println("연산 전: $data / 연산 후: ${data.not()}")
}
fun main() {
val any1 : Any = 10
val any2 : Any = "str"
val any3 : Any = true
checkType(any1)
checkType(any2)
checkType(any3)
}
// 결과
연산 전: 10 / 연산 후: -10
연산 전: str / 연산 후: STR
연산 전: true / 연산 후: false
6) 형 변환
- 코틀린에서는 자동 형변환을 지원하지 않기 때문에 to타입() 형태의 함수를 이용해야 한다.
- 형 변환 함수: toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar()
fun main() {
val byte : Byte = 1.toByte()
val short : Short = 1.toShort()
val int : Int = 1L.toInt()
val float : Float = 1.toFloat()
val double : Double = 1.toDouble()
val char : Char = 97.toChar()
println("$byte $short $int $float $double $char")
}
// 결과
1 1 1 1.0 1.0 a
- 연산되는 값은 자동 형변환이 가능하다
fun main() {
println(1L+3)
println('c'+"de")
}
// 결과
4
cde
- 상속관계에서는 as 연산자를 이용해서 형변환 가능
7) 배열
- 코틀린에서의 배열은 Array 객체로 표현되며 기본 함수를 포함하고 있다.
- 타입에 상관없이 추가가 가능하며 타입을 제한하고 싶을 때는 제네릭을 사용하거나 특정 타입 배열 클래스를 사용한다.
- 선언 형식: arrayOf(값1, 값2 ...)
fun main() {
var arr = arrayOf(1, 2, 3, 4, 5)
println("${arr[0]}, ${arr[1]}, ${arr[2]}, ${arr[3]}, ${arr[4]}")
}
// 결과 1, 2, 3, 4, 5
fun main() {
var arr = arrayOf(1, "??", true)
println("${arr[0]}, ${arr[1]}, ${arr[2]}")
var arr2 = arrayOf<String>("a", "b", "c")
println("${arr2[0]}, ${arr2[1]}, ${arr2[2]}")
arr2.set(2, "?")
// arr2.set(2, 4) // 타입 에러 발생!!
println("${arr2[0]}, ${arr2[1]}, ${arr2[2]}")
var arr3 = intArrayOf(1, 2, 3)
println("${arr3[0]}, ${arr3[1]}, ${arr3[2]}")
var arr4 = StringArray(0, 3, true)
arr4.add("a")
arr4.add("b")
arr4.add("c")
println("${arr4[0]}, ${arr4[1]}, ${arr4[2]}")
}
// 결과
1, ??, true
a, b, c
a, b, ?
1, 2, 3
a, b, c
8) List, Set, Map
- List: 순서가 있는 데이터 집합, 중복 허용
- Set: 순서가 없으며 데이터 중복을 허용하지 않음
- Map: 키와 값으로 이루어지는 데이터 집합, 순서가 없으며 키의 중복은 허용하지 않음
- 컬렉션 타입의 클래스들은 가변(mutable) 클래스와 불변(immutable) 클래스로 구분되며 각각 구분해서 선언한다.(ex. listOf() / mutableListOf())
fun main() {
val list : List<Int> = listOf(1, 2, 3)
var mutableList : MutableList<Int> = mutableListOf(1, 2, 3)
// list.add(4) // 에러 발생!!
mutableList.add(4)
}
9) 이터레이터
- 컬렉션 타입의 데이터를 사용하기 위한 인터페이스
- hasNext(): 가져올 수 있는 데이터 여부 반환(Boolean)
- next(): 다음 데이터를 반환
fun main() {
val map : Map<Int, String> = mapOf<Int, String>(1 to "a", 2 to "b", 3 to "c")
val iterator = map.iterator()
while (iterator.hasNext())
println(iterator.next())
}
// 결과
1=a
2=b
3=c
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin 요약 정리] 6. 프로퍼티 (0) | 2019.04.09 |
---|---|
[Kotlin 요약 정리] 5. 클래스 (0) | 2019.04.08 |
[Kotlin 요약 정리] 4. 흐름 제어 구문과 연산자 (0) | 2019.04.08 |
[Kotlin 요약 정리] 2. 변수와 함수 (0) | 2019.04.08 |
[Kotlin 요약 정리] 1. 코틀린 기본 (0) | 2019.04.08 |