이 글에서는 자바(Java)로 문자열을 정렬하는 방법을 단계별로 살펴봅니다. 문자열(String)은 하나 이상의 문자로 구성되며 큰따옴표(" ")로 감싸 표현하는 데이터 타입으로, 본질적으로는 문자들의 연속(sequence)입니다.
아래는 실제 동작 예시입니다.
입력값
Input string: javaprogram
기대 출력 결과
String after sorting is: [a, a, a, g, j, m, o, p, r, r, v]
즉, 문자열 "javaprogram"을 구성하는 문자들을 알파벳 순서(a → z)대로 재배열하는 것이 목표입니다.
정렬 알고리즘
여기서는 인접한 두 문자를 반복적으로 비교하고 교환하는 버블 정렬(Bubble Sort) 방식을 사용합니다.
Step 1 - 프로그램 시작 Step 2 - 문자열 변수 input_string, 문자 배열 charArray, 임시 저장용 char 변수 temp, 크기 저장용 int 변수 string_size를 선언한다. Step 3 - 각 변수에 값을 할당한다. Step 4 - toCharArray() 메서드로 문자열을 문자 배열로 변환한다. Step 5 - 이중 반복문으로 문자 배열을 순회하며 인접한 요소를 비교하고, 순서가 맞지 않으면 temp 변수를 이용해 서로 교환(swap)한다. Step 6 - 정렬이 완료된 배열을 출력한다. Step 7 - 프로그램 종료
예제 1: main 메서드에서 모든 로직 처리
첫 번째 방식은 모든 연산을 'main' 메서드 안에 직접 작성하는 절차적 스타일입니다.
import java.util.Arrays;
public class SortString {
public static void main(String args[]) {
int temp, string_size;
String input_string = "javaprogram";
System.out.println("정의된 문자열: " + input_string);
char charArray[] = input_string.toCharArray();
string_size = charArray.length;
for(int i = 0; i < string_size; i++ ) {
for(int j = i+1; j < string_size; j++) {
if(charArray[i] > charArray[j]) {
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = (char) temp;
}
}
}
System.out.println("\n정렬 후 문자 배열: " + Arrays.toString(charArray));
}
}
실행 결과
정의된 문자열: javaprogram 정렬 후 문자 배열: [a, a, a, g, j, m, o, p, r, r, v]
예제 2: 객체 지향 방식으로 구현
두 번째 방식은 정렬 로직을 별도의 메서드로 분리해 캡슐화함으로써 객체 지향 프로그래밍(OOP)의 장점을 살린 구조입니다. 이렇게 하면 코드의 재사용성과 가독성이 크게 향상됩니다.
import java.util.Arrays;
public class SortString {
static void sort(String input_string){
int temp, string_size;
char charArray[] = input_string.toCharArray();
string_size = charArray.length;
for(int i = 0; i < string_size; i++ ) {
for(int j = i+1; j < string_size; j++) {
if(charArray[i] > charArray[j]) {
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = (char) temp;
}
}
}
System.out.println("\n정렬 후 문자 배열: " + Arrays.toString(charArray));
}
public static void main(String args[]) {
String input_string = "javaprogram";
System.out.println("정의된 문자열: " + input_string);
sort(input_string);
}
}
실행 결과
정의된 문자열: javaprogram 정렬 후 문자 배열: [a, a, a, g, j, m, o, p, r, r, v]
참고: Arrays.sort()로 더 간단하게 정렬하기
정렬 알고리즘을 직접 구현하지 않고도 자바 표준 라이브러리의 Arrays.sort() 메서드를 사용하면 한 줄로 문자 배열을 오름차순 정렬할 수 있습니다.
import java.util.Arrays;
public class SortStringSimple {
public static void main(String args[]) {
String input_string = "javaprogram";
char charArray[] = input_string.toCharArray();
Arrays.sort(charArray);
System.out.println("정렬 후 문자 배열: " + Arrays.toString(charArray));
}
}
이 방법은 코드가 매우 간결하다는 장점이 있습니다. 다만 내부적으로 듀얼피벗 퀵소트(Dual-Pivot Quicksort) 같은 고급 알고리즘이 동작하므로, 정렬의 원리를 깊이 이해하고 싶다면 예제 1과 2처럼 직접 구현해 보는 것이 좋습니다.