이 글에서는 Java에서 두 문자열을 사전순(lexicographical order)으로 비교하는 방법을 알아보겠습니다. 먼저 기본 개념부터 짚고 넘어가겠습니다.
문자열(String)이란?
문자열은 하나 이상의 문자로 구성된 데이터 타입으로, 항상 큰따옴표(" ")로 감싸서 표현합니다. 문자열은 일련의 문자들이 순서대로 나열된 형태이며, Java에서는 문자열을 단순한 데이터가 아닌 객체(Object)로 취급한다는 점이 특징입니다.
아래는 두 문자열을 비교하는 과정에 대한 간단한 시연 예시입니다.
입력값이 다음과 같다고 가정해 보겠습니다.
Input string: Morning Input string: Evening
원하는 출력 결과는 다음과 같습니다.
The result of comparing the two strings is: 8
compareTo() 메서드의 동작 원리
Java에서 문자열을 사전순으로 비교할 때는 String 클래스가 제공하는 compareTo() 메서드를 사용합니다. 이 메서드는 두 문자열을 앞 문자부터 차례대로 비교하며, 다음과 같은 값을 반환합니다.
- 첫 번째 문자열이 사전순으로 더 뒤에 있으면 양수
- 첫 번째 문자열이 사전순으로 더 앞에 있으면 음수
- 두 문자열이 완전히 같으면 0
위 예제에서 반환값이 8인 이유는, 첫 번째로 다른 문자인 'M'(ASCII 77)과 'E'(ASCII 69)의 차이가 정확히 8이기 때문입니다.
알고리즘
1단계 - 시작 2단계 - input_string_1, input_string_2라는 이름의 두 문자열 변수를 선언합니다. 3단계 - 두 변수에 값을 할당(초기화)합니다. 4단계 - .compareTo() 메서드를 사용하여 두 문자열을 비교합니다. 5단계 - 비교 결과를 출력합니다. 6단계 - 종료
예제 1: main 함수 안에서 모든 로직 처리하기
첫 번째 방식은 비교 연산을 포함한 모든 과정을 'main' 함수 안에서 한 번에 처리하는 방법입니다.
public class Demo {
public static void main(String[] args) {
String input_string_1 = "Morning";
System.out.println("The first string is defined as: " + input_string_1);
String input_string_2 = "Evening";
System.out.println("The second string is defined as: " + input_string_2);
System.out.println("\nThe result of comparing the two strings is: ");
System.out.println(input_string_1.compareTo(input_string_2));
}
}
출력 결과
The first string is defined as: Morning The second string is defined as: Evening The result of comparing the two strings is: 8
예제 2: 객체 지향 방식으로 함수 분리하기
두 번째 방식은 비교 로직을 별도의 메서드로 캡슐화하여 객체 지향 프로그래밍(OOP) 원칙에 맞게 구조화한 예제입니다. 이렇게 하면 코드의 재사용성과 가독성이 향상됩니다.
public class Demo {
static void compare(String input_string_1, String input_string_2){
System.out.println("\nThe result of comparing the two strings is: ");
System.out.println(input_string_1.compareTo(input_string_2));
}
public static void main(String[] args) {
String input_string_1 = "Morning";
System.out.println("The first string is defined as: " + input_string_1);
String input_string_2 = "Evening";
System.out.println("The second string is defined as: " + input_string_2);
compare(input_string_1, input_string_2);
}
}
출력 결과
The first string is defined as: Morning The second string is defined as: Evening The result of comparing the two strings is: 8
마무리
지금까지 Java에서 compareTo() 메서드를 사용하여 두 문자열을 사전순으로 비교하는 두 가지 구현 방식을 살펴보았습니다. 간단한 스크립트 수준의 코드라면 예제 1처럼 main 함수에 바로 작성해도 무방하지만, 규모가 커지는 프로젝트에서는 예제 2처럼 기능별로 메서드를 분리하는 객체 지향적 접근이 훨씬 유지보수에 유리합니다.