Kotlin

[Kotlin] contentToString을 알아보자

Charlie_moon 2022. 9. 29. 13:04

 

 

 

 

 

[Kotlin] JoinTo 를 알아보자

코틀린에서 배열을 출력해보면 다음과 같이 나타난다. 이는 println을 깊게 파고 들어가면 알 수 있는데 //코틀린에서 내가 호출한 함수 @kotlin.internal.InlineOnly public actual inline fun println(message..

charlie-dev.tistory.com

 

이전 글에서 JoinTo에 대해서 알아보았다. 이번에는 contentToString 을 알아보도록 하겠다.

 

 

 

 

 

먼저 contentToString 사용법이다.

 

fun main() {
    var array = arrayOf<String>("가","나","다","라","마","바",)
    println(array.contentToString())
}

// 출력
//[가, 나, 다, 라, 마, 바]

 

contentToString 함수를 보자

//contentToString 함수
@SinceKotlin("1.4")
@JvmName("contentToStringNullable")
@kotlin.internal.InlineOnly
public actual inline fun <T> Array<out T>?.contentToString(): String {
    return java.util.Arrays.toString(this)
}

함수의 내부는 사실상 자바의 Arrays.toString을 자기 자신으로 호출하고 있는것을 볼 수 있다.

 

 

 

java.util.Arrays.toString 함수를 보자

//java.util.Arrays.toString 함수
public static String toString(Object[] a) {
	//1.배열 null체크
    if (a == null)
        return "null";
	//2.배열의 길이 설정
    int iMax = a.length - 1;
    //3.배열의 길이가 0 이면 위에서 -1 로인해 -1값을 가지며 빈배열 문자열 반환
    if (iMax == -1)
        return "[]";
	//4.StringBuilder 생성
    StringBuilder b = new StringBuilder();
    //빌더에 배열의 표시 '['를 추가
    b.append('[');
    //5.배열을 순회
    for (int i = 0; ; i++) {
    	//6.배열의 오브젝트를 문자열로 변환하여 빌더에 추가
        b.append(String.valueOf(a[i]));
        //7.i 값이 iMax(배열 길이)와 같은지 비교
        if (i == iMax)
            //배열의 끝을 나타내는 ']' 문자 추가후 빌더를 문자열로 변환 후 반환한다.
            return b.append(']').toString();
        //8.오브젝트를 구분하기 위한 ", " 문자열 빌더에 추가
        b.append(", ");
    }
}

 

toString() 함수 순서

 

1.배열 null 체크 

  null 값이라면 "null" 문자열 반환

2.배열의 길이 값 설정

  배열의 length - 1 하여 길이를 설정한다.

3.배열이 비어있는지 체크

  iMax(배열 길이)가 -1 이면 빈 배열을 나타내는 "[]" 문자열 반환

4.StringBuilder 생성

  StringBuilder 생성하고 배열의 시작을 나타내는 '[' 문자 빌더에 추가

5.배열 순회 시작

6.배열 오브젝트 문자열 변환

  배열에서 index에 해당하는 오브젝트를 문자열로 변환하여 빌더에 추가

7.배열 순회 끝 체크

  i의 값이 iMax와 같은지 체크 i가 iMax와 같다면 배열의 마지막 요소까지 빌더에 추가 되었음으로 배열의 마지막을 나타내는 ']'문자 빌더  에 추가하고 빌더에 입력된 데이터를 문자열로 변환하여 반환한다.

8.오브젝트 간 구분자 추가

  7번의 if문을 타지 않았다면 배열 순회가 끝나지 않았음으로 오브젝트간 구별 할 수 있는 ", " 문자열을 빌더에 추가한다.

 

 

이상 코틀린의 contentToString 함수에 대해서 알아보았다.

'Kotlin' 카테고리의 다른 글

[Kotlin] JoinTo 를 알아보자  (0) 2022.09.28
[Kotlin] var / val / const 개념 정리  (0) 2021.06.22