자바에서 재귀를 이용해 문자열 뒤집기: 단계별 가이드
자바에서 재귀를 이용해 문자열 뒤집기
재귀는 더 작고 유사한 하위 문제로 분해할 수 있는 문제를 해결하는 강력한 기법입니다. 문자열 뒤집기는 단순한 재귀 함수가 어떻게 우아하게 문자열 조작을 처리하는지 보여주는 고전적인 예제입니다.
왜 재귀를 사용하는가?
- 개념적 명확성 – 함수가 문제 정의를 자연스럽게 반영합니다.
- 최소 코드 – 몇 줄만으로 뒤집기를 수행합니다.
- 교육적 가치 – 기저 사례/재귀 단계 패턴을 강화하는 데 도움이 됩니다.
자바 구현
다음 프로그램은 문자열을 읽고, 재귀 뒤집기 메서드를 적용한 후 결과를 출력합니다.
package com.guru99;
public class ReverseString {
public static void main(String[] args) {
String myStr = "Guru99";
String reversed = reverseString(myStr);
System.out.println("뒤집힌 문자열: " + reversed);
}
/**
* 주어진 문자열을 재귀적으로 뒤집습니다.
* @param str 뒤집을 문자열
* @return 뒤집힌 문자열
*/
public static String reverseString(String str) {
if (str.isEmpty()) {
return ""; // 기저 사례: 빈 문자열은 자기 자신의 뒤집기
}
// 첫 문자를 제외한 부분문자열에 재귀 호출 후 첫 문자를 뒤에 결합
return reverseString(str.substring(1)) + str.charAt(0);
}
}
일반적인 출력
The reversed string is: 99uruG
흐름 이해하기
재귀는 첫 문자를 반복적으로 제거하고, 남은 부분문자열의 뒤집기 결과 뒤에 해당 문자를 결합하는 방식으로 작동합니다. 부분문자열이 비게 되면 재귀가 풀리면서 문자들이 역순으로 결합됩니다.
예외 상황 및 성능
- 빈 문자열 – 기저 사례로 처리되어 즉시 빈 문자열 반환
- Null 입력 – {@code NullPointerException} 방지를 위해 null 체크 추가 가능
- 시간 복잡도 – 재귀 스택으로 인해 시간과 공간 모두 O(n)
핵심 요약
재귀적 문자열 뒤집기는 간결하며 핵심 알고리즘 사고를 잘 보여줍니다. 성능이 중요한 프로덕션 코드에서는 반복적 접근이나 {@code StringBuilder} 사용이 스택 사용량 측면에서 더 바람직합니다.