-
[코틀린 완벽 가이드] 2장 코틀린 언어 기초 (2.3 - 2.4)코틀린 공부/코틀린 2023. 12. 27. 15:33
2.3 문자열
2.3.1 문자열 템플릿
val hello = "Hello, world!"
코틀린은 여러 가지 식에서 문자열을 합성해내는 훨씬 더 강력한 방법을 지원한다.
println("$hello, Today is ${Date()}")
결과 :
Hello, world!, Today is Wed Dec 27 15:24:31 KST 2023
${}의 중괄호 사이에 넣기만하면, 어떤 올바른 코틀린 식이든 문자열에 넣을 수 있다. 이런 기능을 문자열 템플릿이라고 한다.
또 다른 문자열 유형으로 로우 문자열(raw string)이 있다. 로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고도 문자열 작성이 가능하다.
val message = """ $hello, Today is ${Date()} """.trimIndent() println(message)
결과 :
Hello, world!, Today is Wed Dec 27 15:28:43 KST 2023
2.3.2 기본 문자열 연산
println("Hello!".length) // 6 println("Hello!".lastIndex) // 5 println("Hello!"[0]) // H
자바에서는 ==와 != 연산자를 참조 동등성 비교를 하기 때문에 문자열을 비교하려면 equals메소드를 사용해야 했지만 코틀린에서는 ==이 직접 equals를 호출하므로 ==을 사용하면된다.
코틀린에서 참조 동등성을 쓰고 싶으면 ===, !==을 사용하면 된다
유용한 함수들 :
- isEmpty, isNotEmpty : 문자열이 비어있는지 검사
- substring : 부분 문자열을 추출한다.
- startsWith, endsWIth : 접두사나 접미사인지 검사한다.
- indexOf : 인자로 받은 문자나 문자열이 수신객체인 문자열에 나타나는 몇번째 index인지 반환한다. 없다면 -1 반환
2.4 배열
2.4.1 배열 정의하기
배열 구조를 구현하는 가장 일반적인 코틀린 타입은 Array<T>다. 여기는 T는 원소의 타입을 뜻한다.
만들려는 배열의 크기를 미리 알 수 있다면 표준 함수 중 하나를 사용해 배열을 생성할 수 있다.
val a = emptyArray<String>() val b = arrayOf("hello", "World") val c = arrayOf(1, 4, 9)
각 함수는 제네릭(generic)하다. 이 말은 호출할 떄 원소의 타입을 지정해야 한다는 뜻이다.
하지만 타입 추론 덕분에 2 번째 3 번째 함수 호출의 타입을 인자들의 타입에서 알아낼 수 있다.
1 번째 예처럼 추론할 수 있는 단초가 없다면 (<>) 사이에 원소 타입을 명시해야 한다. 이걸 제네릭스라 하고 이건 9장에서 다시 다룬다.
Index로 부터 원소를 만들어내는 방법을 기술해 배열을 생성하는 더 유연한 방법도 있다.
val size = 3 val squares = Array(size){ (it+1) * (it+1) // 1, 4, 9 } println(squares[0]) // 1
중괄호({}) 안에 들어있는 언어 요소를 람다(lambda)라고 부른다. 람다는 index를 기반으로 값을 계산하는 식을 정의한다.
이때 인덱스를 표현하는 변수로 자동으로 선언되는 it을 사용한다. (5장에서 더 살펴 봄)
Array<Int>를 사용하는 배열은 제대로 작동은 하지만 모든 수를 박싱하기 때문에 그다시 실용적이지 못한 해법이다. 이런 이유로 코틀린은 더 효율적인 ByteArray, ShortArray, IntArray, LongArray, FloatArray, DoubleArray, CharArray, BooleanArray 라는 특화된 배열 타입을 제공한다.
2.4.2 배열 사용하기
val squares2 = arrayOf(1, 4, 9, 16) println(squares2.size) // 4 println(squares2.lastIndex) // 3 println(squares2[3]) // 16 squares2[1] = 100 println(squares2[1]) // 100
자바와 마찬가지로 배열 타입의 변수 자체에는 실제 데이터에 대한 참조를 저장한다. 이로 인해 배열 변수에 다른 배열을 대입하면 같은 데이터 집합을 함께 공유하게 된다.
val numbers2 = squares2 numbers2[0] = 1000 println(squares2[0]) // 1000
원본과 별도로 배열을 만들고 싶다면 copyOf() 함수를 사용해야 한다. copyOf()는 필요시 다른 크기의 배열을 만들어 내기도 한다.
val numbers = squares.copyOf() squares.copyOf(2) // 뒤가 짤림: 1, 4 squares.copyOf(5) // 뒤가 짤림: 1, 4, 9, 16, 0
코틀린에서는 상위 타입의 배열에 하위 타입의 배열을 대입할 수 없다.
val test = "hi" val test1:Any = test println(test1) val strings = arrayOf("one", "two") val strings2: Array<Any> = strings // 예외
'코틀린 공부 > 코틀린' 카테고리의 다른 글
[코틀린 완벽 가이드] 3장 함수 정의하기 (3.5 예외 처리) (0) 2023.12.29 [코틀린 완벽 가이드] 3장 함수 정의하기 (3.3 조건문와 3.4 루프) (0) 2023.12.29 [코틀린 완벽 가이드] 3장 함수 정의하기 (3.1 함수) (0) 2023.12.28 [코틀린 완벽 가이드] 2장 코틀린 언어 기초 (2.1 - 2.2) (1) 2023.12.27 [코틀린 완벽 가이드] 1장 강력하고 실용적인 코틀린 (1) 2023.12.27