본문 바로가기

Kotlin

Kotlin - 데이터 타입 (Character, String)

출처 : https://kotlinlang.org/docs/characters.html, https://kotlinlang.org/docs/strings.html

 

Characters | Kotlin

 

kotlinlang.org

문자 (Characters)

문자는 Char 타입으로 표현 할 수 있다. 값은 작은 따옴표(')를 이용해 할당한다.

val a = 'a'

특수문자

  • \t : tab
  • \b : backspace
  • \n : new line (LF)
  • \r : carriage return (CR)
  • \' : 작은 따옴표 (')
  • \" : 큰 따옴표 (")
  • \\ : backslash
  • \$ : $
  • \u : Unicode로 인코딩 하는 경우 (예 : '\uFF21')

문자가 숫자 인 경우 digitToInt() 함수를 이용해서 Int 타입으로 변경 할 수 있다.

val c: Char = 'a'
println(c.digitToInt()) // Error - Char a is not a decimal digit

var d: Char = '1'
println(d.digitToInt()) // 1

 

문자열 (Strings)

문자열의 문자를 (문자열을 배열로 간주해서) 인덱스를 통해  접근 할 수 있다. for문 에서도 in 연산자로 문자열의 각 문자를 순회 할 수 있다.

val str: String = "abcd 123"

for (c in str) {
    println(c)
}

String은 불변 객체이기 때문에 한번 값이 할당되면 값을 바꾸거나 새로운 값으로 변경 할 수 없다. 따라서 문자열의 형태가 변경되는 기능들은 실제로 문자열을 변경하는 것이 아니라 새로운 String 객체를 생성해서 반환 하는 것 이다.

val str = "abcd"

println(str.uppercase()) // 새로운 String 객체를 생성한다.
// ABCD

println(str)
// abcd

문자열을 병합 할때는 + 연산자를 사용한다. 첫번째 인자가 문자열 인 경우 두번째 인자가 문자열이 아니더라도 문자열로 병합된다.

val s = "abc" + 1
println (s + "def")
// abc1def

 

String literals

Kotlin은 2종류의 문자열 리터럴이 존재한다.

Escaped strings

escaped(\) 문자를 포함 할 수 있다.

val s = "Hello, world!\n"

Multiline strings

3중 쌍따옴표를 사용하고 escaped 문자가 포함되지 않는다.

val text = """
    for (c in "Python")
        \t
        eeee
        \n
        aaaa            
"""
/*
        for (c in "Python")
            \t
            eeee
            \n
            aaaa   
 */

multiline strings 리터럴은 3중 따옴표 내부의 문자를 그대로 인식하기때문에 의도치 않게 들여쓰기까지 인식 된다.

이를 해결하기 위해 trimMargin() 함수를 이용하는데, 이는 약속된 심볼을 마진 경계선으로 인식해서 그 앞쪽의 공백들을 정리 해 주는 기능을 한다. 함수의 파라미터로 마진 경계를 표시하는 심볼을 지정 할 수도 있다. (아래 예제의 마지막 text2.trimMargin(">") 참고)

val text = """
    |Tell me and I forget.
    |Teach me and I remember.
    |Involve me and I learn.
    (Benjamin Franklin)
"""

println(text)
/*
    |Tell me and I forget.
    |Teach me and I remember.
    |Involve me and I learn.
    (Benjamin Franklin)
*/

println(text.trimMargin())
/*
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
    (Benjamin Franklin)
*/

val text2 = """
    >Tell me and I forget.
    >Teach me and I remember.
    >Involve me and I learn.
    >(Benjamin Franklin)
"""
println(text2.trimMargin(">"))
/*
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)
*/

 

문자열 템플릿 (String templates)

문자열 리터럴은 $변수, ${표현식} 형태의 템플릿 표현식을 허용한다.

val i = 10
println("i = $i") // i = 10

val s = "abc"
println($s.length is ${s.length}) // abc.length is 3

문자열 안에서 달러표시($)를 사용하려면 아래와 같은 방식을 사용하면 된다.

val price1 = "\$_99.9"
println(price1)

val price2 = """
    ${'$'}_99.9
"""
println(price2)

 

문자열 포매팅 (String formatting)

String.format() 함수는 Kotlin/JVM 에서만 가능하다.

String.format() 함수는 형식(format) 문자열과 하나 이상의 인자 값을 받는다. 형식 문자열은 인자당 한개씩의 placeholder(%)를 포함한다. placeholder 정의는 java의 Formatter를 참고한다.

// Formats to add zeroes and make a length of seven
val integerNumber = String.format("%07d", 31416)
println(integerNumber)
// 0031416

// Formats with four decimals and sign
val floatNumber = String.format("%+.4f", 3.141592)
println(floatNumber)
// +3.1416

// Formats with uppercase for two placeholders
val helloString = String.format("%S %S", "hello", "world")
println(helloString)
// HELLO WORLD

String.format() 함수는 문자열 템플릿과 유사하지만, 더 다양한 서식 옵션을 제공 하기  때문에 더 유용하게 사용 된다.

그리고 형식 문자열을 변수 처리 해서 상황에 맞게 형식을 손쉽게 변경 할 수도 있다.

반응형

'Kotlin' 카테고리의 다른 글

Kotlin - 반복문(for, while)  (0) 2024.01.10
Kotlin - 조건문  (2) 2024.01.07
Kotlin - 타입체크와 형 변환  (0) 2024.01.06
Kotlin - 데이터 타입 (배열)  (0) 2024.01.01
Kotlin - 데이터 타입 (숫자, Boolean)  (2) 2023.12.30