의문점 공부하기/📌 Java

📌 문자열을 반전시키는 가장 좋은 방법은 무엇일까?

아리빠 2023. 6. 9. 17:46

- 문자열을 문자 배열로 변환하여 반전시킨 후 다시 문자열로 변환하는 방법:

public String reverseString(String str) {
    char[] chars = str.toCharArray(); // 문자열을 문자 배열로 변환
    int left = 0;
    int right = chars.length - 1;
    while (left < right) {
        char temp = chars[left];
        chars[left] = chars[right];
        chars[right] = temp;
        left++;
        right--;
    }
    return new String(chars); // 문자 배열을 문자열로 변환
}

- StringBuilder나 StringBuffer를 사용하여 문자열을 반전시키는 방법

public String reverseString(String str) {
    StringBuilder sb = new StringBuilder(str);
    return sb.reverse().toString();
}

- 재귀 함수를 사용하여 문자열을 반전시키는 방법:

public String reverseString(String str) {
    if (str.isEmpty()) {
        return str;
    }
    return reverseString(str.substring(1)) + str.charAt(0);
}

일반적으로는 첫 번째 방법인 문자 배열을 이용하는 방법이 성능 면에서 가장 효율적이다.

문자열을 수정할 수 있는 char[] 배열을 사용하므로 문자열을 반전시키기 위해 새로운 문자열 객체를 생성하는 오버헤드가 없다. 따라서 문자열이 매우 크거나 반복적으로 반전시켜야 하는 경우에는 이 방법이 가장 효율적

두 번째 방법인 StringBuilder나 StringBuffer를 사용하는 방법은 문자열을 수정할 수 있는 가변성을 제공하므로 성능이 좋다. 하지만, StringBuilder는 스레드에 안전하지 않고, StringBuffer는 스레드에 안전하지만 성능 면에서는 더 느릴 수 있다.

세 번째 방법은 재귀 함수를 사용하여 문자열을 반전시키는 방법, 이 방법은 간단하지만, 재귀 호출의 깊이가 문자열의 길이에 비례하므로 큰 문자열에서는 스택 오버플로우의 위험이 있을 수 있다. 따라서 문자열의 길이가 작거나 재귀 호출의 깊이에 대한 제한이 있는 경우에 사용하는 것이 적합