스트링 풀과 intern() 메소드 예제의 보충 설명입니다. 자세한 내용은 쉽게 다가가는 최신 프로그래밍: 코틀린 - 1.9.1 스트링 풀을 참고하기 바랍니다.
String과 CharArray의 차이점이 뭘까요? 가장 큰 차이점은 String은 불변(immutable)이지만, CharArray는 가변(mutable)이라는 점입니다. String 타입 객체는 문자열을 할당하고 나면, 문자 1개도 바꿀 수 없습니다. 반면 CharArray 타입 객체는 몇 번이고 문자열을 바꿀 수 있습니다.
String과 CharArray는 서로 타입을 변환할 수 있습니다. CharArray 타입을 String 타입으로 변환하려면 생성자 String(chars: CharArray) 를 호출하면 됩니다. String 타입을 CharArray 타입으로 변환하려면 toCharArray() 메소드를 호출하면 됩니다.
fun main() {
val s: String = "Hello"
val chArray: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o')
val s2 = String(chArray)
val chArray2 = s.toCharArray()
}
String 과 CharArray의 두 번째 차이점은 String은 문자열 관련 다양한 함수(replace, subString, lowercase 등)를 사용할 수 있지만, CharArray는 그런 함수들이 없어 직접 변경해야 하는 점입니다. 아래 코드에서 copyOf()는 배열 객체를 복사하는 함수이며, 코틀린 라이브러리에 포함되어 있습니다. 참고로 clone()은 자바 라이브러리에서 제공하는 함수입니다.
fun main() {
val s: String = "Hello"
val chArray: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o')
val orgArray = chArray.copyOf()
val newStr = s.replace('H', 'h')
println("$s is modified to $newStr")
chArray[0] = 'h'
println("${orgArray.joinToString("")} is modified to ${chArray.joinToString("")}")
}
잠깐! CharArray 타입 객체는 배열이기 때문에 그대로 출력할 수 없습니다. 해결 방법 중 하나는 배열 원소를 출력하기 위해 사용하는 contentToString()을 사용하는 것입니다. 그러나, 이 방법 보다는 joinToString(separator: CharSequence)를 사용하는 것이 출력 결과가 보기 좋습니다. 괄호 안의 인자 separator는 원소와 원소를 연결하는 문자열입니다. CharSequence는 쉽게 다가가는 최신 프로그래밍: 코틀린 - 1.10 String과 CharSequence를 참고하기 바랍니다.
fun main() {
val chArray: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o')
println(chArray.contentToString())
println(chArray.joinToString(""))
}
조금 귀찮긴 하지만 아래처럼 CharArray 타입 객체를 String 타입 객체로 변환하는 게 편할 때도 있습니다.
fun main() {
val chArray: CharArray = charArrayOf('H', 'e', 'l', 'l', 'o')
val orgArray = chArray.copyOf()
val s2: String = String(chArray)
val newStr: String = s2.uppercase()
println("${orgArray.joinToString("")} is modified to $newStr")
}
이제 준비가 되었죠! 예제 실행 결과가 왜 그렇게 나왔는지 분석해 보기 바랍니다. String 타입 객체 s와 CharArray 타입 객체 chArray가 분명 같은 값을 갖고 있는 데 말이죠...
fun main() {
val s = "Hello"
val chArray = charArrayOf('H', 'e', 'l', 'l', 'o')
val s2 = String(chArray)
println(s == s2)
println(s === s2)
}
'코틀린' 카테고리의 다른 글
코틀린: 1장 테스트에 도전해 보세요 (0) | 2024.09.08 |
---|---|
코틀린: 널 타입과 안전 호출, 스마트 형 변환 (0) | 2024.09.04 |
코틀린: String의 원소 참조 - 인덱싱 (0) | 2024.09.03 |
코틀린: package와 import(updated) (0) | 2024.09.03 |
코틀린: 진법 변환 구현 (0) | 2024.08.04 |