Kotlin StringBuilder - 문자열 효율적으로 다루기

Notepad96

·

2020. 11. 30. 14:36

300x250

 

 

 

 


1. StringBuilder

 

String 문자열은 참조 타입으로써 만약 문자열 뒤에 문자열을 추가하는 것 같은 수정하는 작업을 한다면

 

기존 참조하고 있던 곳에 추가하는 것이 아니라 추가된 문자열을 갖는 새로 String을 생성 후 참조를 바꾸는 형식이다.

 

String += 연산 후 모습

이러한 연산이 끝난 후 "ab"라는 쓰레기가 남게 된다.

 

그리고 이러한 연산을 많아질수록 자원 관리와 같은 점에서 비효율적이다.

 

 

 

이러할 경우 사용할 수 있는 것이 StringBuilder이며

 

이는 String 처럼 참조를 바꾸는 식이 아니라 참조하고 있는 값을 바꾸는 식이다.

 

 

 

따라서 문자열을 수정하는 작업이 많을 경우 String을 사용하기보다는 StringBuilder를 사용해야 좋다.

 

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.20, JVM

fun main(args : Array<String>) {
    /*
    기존 참조하던 "abc" 뒤에 "def"를 추가하는 것이 아니라
    추가된 문자열 "abcdef"를 새로 생성하고 참조하는 것이다.
    그러면 쓰레기 "abc"가 남게되며 이러한 과정이 많아지면 비효율적
    var s1 = "ab"
    s1 += "cd"
    */

    val str = StringBuilder()   // 빈 생성자
    println("1. 문자열 : $str")
    /* 추가 */
    str.append(5)               // Int 타입
    str.append("gdfa")          // String 타입
    str.append('Q')             // Char 타입
    str.append(true)            // Boolean 타입
    str.append(5431)
    str.append("DFSDE")
    str.append("treq")

    println("2. 문자열 : $str")
    println("index=0 : ${str[0]}, index=5 : ${str[5]}")

    /* 삭제 */
    str.deleteCharAt(0) // index
    str.delete(0, 1)    // [start, end)
    println("3. 문자열 : $str")

    println("=========================================")
    val temp: String = "ABCD"
    val str2 = StringBuilder(temp)  // String을 받는 생성자
    println("1. 문자열 : $str2")
    println("길이 = ${str2.length}")
    println("뒤집기 = ${str2.reverse()}")

    str2.insert(0, "fds")   // index=0 위치에 추가
    println("2. 문자열 : $str2")

    val li = listOf("abc", "def", "ghi")
    str2.append(li.joinToString(""))
    println("3. 문자열 : $str2")

    println("4-1. 부분 문자열 : ${str2.substring(3)}")       // [3, length)
    println("4-2. 부분 문자열 : ${str2.substring(3, 7)}")        // [3, 7)
    println("4-3. 부분 문자열 : ${str2.substring(3..7)}")    // [3, 7]

    println("=========================================")
    val str3 = str.toString()   // String Type으로 저장
    if(str3 is String) println("String Type")

}

 

결 과

- StringBuilder빈 생성자가 존재한다.

 

append 함수를 사용하여 뒤에 문자열을 추가해줄 수 있다.

 

append의 인자로서는 String, Int, Char, Boolean 등 다 존재하여 사용할 수 있다.

 

 

'[]' 연산자가 정의되어 있어 인덱스를 사용하여 문자의(Char) 접근할 수 있다.

 

 

 

 

 

- 삭제하기 위해서는

 

deleteCharAt(index) : index 위치한 문자 삭제

 

delete(start, end) : [start, end) start이상 end 미만 index의 위치한 문자들 삭제

 

를 사용할 수 있다.

 

 

 

 

 

- StringBuilder 문자열을 받는 생성자도 존재한다.

 

length : 길이를 반환

 

reverse : 거꾸로 뒤집기

 

insert( index, value) : index 위치에 value를 삽입

 

 

문자열 리스트를 삽입하고자 하면 joinToString을 사용할 수 있다.

 

 

Kotlin joinToString - List 문자열 변환 List to String

1. joinToString - List to String List를 print를 사용하여 출력하거나하면 toString이 호출되며 [ ... ] 와 같은 형태로 변환된다. 하지만 리스트의 원소들을 모두 연결한 하나의 문자열로 만들고 싶은 경우가.

notepad96.tistory.com

 

 

 

- subString울 사용하여 부분 문자열을 갖고올 수 있다.

 

1, 2 방법은 Java에서 사용하는 것과 동일하다.

 

 

 

 

- 어디까지나 StringBuilder 타입이기 때문에 String 타입으로 저장하거나 이용하고자 한다면 toString을 사용하여 String 타입으로 변환해주어야 한다.

 

 

 

 

 


3. 참 조

 

 

StringBuilder - Kotlin Programming Language

 

kotlinlang.org

 

 

300x250