이 글에서는 자바(Java)에서 두 개의 문자열을 비교하는 프로그램을 만드는 방법을 살펴봅니다. 문자열은 문자들이 연속된 나열(sequence of characters)이며, 자바에서는 기본 타입이 아닌 객체(object)로 취급됩니다. 이러한 특성 때문에 두 문자열의 동등 여부나 대소 관계는 단순히 == 연산자로 판단할 수 없으며, 문자를 하나씩 비교하거나 equals()·compareTo() 같은 메서드를 활용해야 합니다.
여기서는 두 문자열을 처음부터 한 글자씩 정수 값으로 변환해 비교하고, 그 차이를 결과로 반환하는 로직을 직접 구현해 보겠습니다.
입력값
첫 번째 문자열 : Java Program 두 번째 문자열 : Java
기대되는 실행 결과
문자열 비교 결과 : 8
알고리즘
1단계 - 시작 2단계 - 필요한 변수를 선언한다. 3단계 - 비교할 문자열 값을 정의한다. 4단계 - 두 문자열의 길이를 계산한 뒤, 더 작은 값을 최소 길이 변수에 저장한다. 5단계 - 최소 길이만큼 반복하면서 두 문자열의 같은 인덱스에 있는 문자를 가져와 정수로 변환하고 서로 비교한다. 6단계 - 다른 문자가 발견되면 두 문자의 정수 값 차이를 계산해 반환한다. 7단계 - 모든 문자가 같다면 두 문자열 길이의 차이를 결과로 반환한다. 8단계 - 결과를 화면에 출력한다. 9단계 - 종료
예제 1 – main 함수 안에 모든 로직 작성
비교 연산 전체를 main 함수 안에서 처리하는 가장 기본적인 형태입니다.
public class CompareStrings {
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("The string is defined as: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("The string is defined as: " + input_string_2);
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
// 기본값은 길이 차이로 설정하고,
// 반복 중 다른 문자가 발견되면 문자 값의 차이로 교체한다.
int result = length_1 - length_2;
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int) input_string_1.charAt(i);
int character_2 = (int) input_string_2.charAt(i);
if (character_1 != character_2) {
result = character_1 - character_2;
break;
}
}
System.out.println("\nThe result of string comparison is: " + result);
}
}
출력
The string is defined as: Java Program The string is defined as: Java The result of string comparison is: 8
예제 2 – 함수로 분리한 객체 지향 방식
비교 로직을 별도의 메서드로 분리해 재사용성을 높인 객체 지향 프로그래밍(OOP) 스타일입니다.
public class CompareStrings {
public static int string_compare(String input_string_1, String input_string_2) {
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int) input_string_1.charAt(i);
int character_2 = (int) input_string_2.charAt(i);
if (character_1 != character_2) {
return character_1 - character_2;
}
}
return length_1 - length_2;
}
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("The string is defined as: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("The string is defined as: " + input_string_2);
System.out.println("\nThe result of string comparison is: "
+ string_compare(input_string_1, input_string_2));
}
}
출력
The string is defined as: Java Program The string is defined as: Java The result of string comparison is: 8
결과 해석
"Java Program"은 12글자, "Java"는 4글자입니다. 두 문자열의 앞부분("Java")은 완전히 같으므로 문자 단위의 차이는 발생하지 않고, 최종적으로 길이 차이인 12 − 4 = 8이 비교 결과로 출력됩니다. 결과가 음수면 첫 번째 문자열이 사전순으로 앞선다는 의미이고, 양수면 뒤처진다는 의미이며, 0이면 두 문자열이 완전히 같다는 뜻입니다.
참고: 실무에서는 compareTo() 활용
실제 프로젝트에서는 위와 같은 로직을 직접 구현하기보다 String 클래스의 compareTo() 메서드를 사용하는 것이 표준적입니다. 이 메서드는 내부적으로 동일한 원리(유니코드 값 비교)로 동작하며 코드가 훨씬 간결해집니다. 예를 들어 "Java Program".compareTo("Java")를 호출하면 마찬가지로 8이 반환됩니다.