문자열(string)이라고 하면 실이나 끈을 떠올리기 쉽습니다. 하지만 프로그래밍에서 말하는 문자열은 완전히 다른 개념입니다.
프로그래밍에서 문자열이란 하나 이상의 문자가 연속된 나열을 뜻합니다. 텍스트 데이터가 컴퓨터와의 일상적인 상호작용에서 차지하는 비중을 생각해 보면, 문자열이 프로그래밍의 핵심 요소라는 사실은 놀랍지 않습니다.
이 가이드에서는 자바에서 문자열을 생성하는 방법, 문자열을 연결하는 방법, 그리고 변수에 문자열 값을 저장하는 방법을 살펴봅니다. 몇 가지 예제를 통해 단계별로 함께 익혀보겠습니다.
자바에서 문자열 생성하기
자바에서 문자열은 텍스트를 저장하는 데 사용됩니다. char 데이터 타입이 개별 문자 하나만 저장할 수 있는 반면, 문자열은 원하는 만큼 많은 문자를 담을 수 있습니다. 문자열은 바이트의 연속으로 구성됩니다.
자바에서 문자열은 큰따옴표(" ")로 정의합니다. 작은따옴표와 큰따옴표를 모두 허용하는 파이썬이나 자바스크립트와는 다른 점입니다. 다음은 자바에서 문자열의 예시입니다:
"This is an example string."
println() 함수를 사용하면 문자열의 내용을 출력할 수 있습니다:
System.out.println("This is an example string.");위 코드는 This is an example string을 출력합니다. 새로운 문자열을 성공적으로 만들었습니다. 이제 문자열을 선언하는 방법을 알았으니, 코드에서 문자열을 다루는 다양한 방법을 살펴보겠습니다.
문자열 연결(Concatenation)
연결(concatenation)이라는 단어는 다소 어렵게 느껴지지만, 의미는 아주 간단합니다. 두 개의 문자열을 합쳐 새로운 문자열을 만드는 것을 말합니다. + 연산자(더하기 기호)를 사용하면 두 문자열을 손쉽게 연결할 수 있습니다.
예를 들어 "William"과 "Carter"라는 두 문자열이 있다고 가정해 보겠습니다. 첫 번째는 이름이고 두 번째는 성입니다. + 연산자로 이 둘을 합칠 수 있습니다:
String fullname = "William" + "Carter"; System.out.println(fullname);
실행 결과는 WilliamCarter입니다. 잠깐, 무슨 일이 일어난 걸까요? 왜 두 단어 사이에 공백이 없을까요?
기본적으로 연결된 문자열 사이에는 공백이 자동으로 추가되지 않습니다. 공백을 넣고 싶다면 "William" 뒤에 공백을 직접 추가해야 합니다:
String fullname = "William " + "Carter"; System.out.println(fullname);
프로그램을 실행하면 William Carter가 출력됩니다.
문자열 길이 계산하기
문자열의 길이는 어떻게 계산할 수 있을까요? 좋은 질문입니다. 다행히 복잡한 함수를 직접 작성할 필요는 없습니다.
자바에는 문자열 길이를 계산할 수 있는 내장 메서드 length()가 이미 포함되어 있습니다. 아주 직관적인 이름이죠!
네 학년 반에 있는 두 학생의 이름 길이를 계산하는 프로그램을 만들어 보겠습니다. 새 자바 파일을 만들고 다음 코드를 메인 클래스에 붙여넣으세요:
String name1 = "William Carter"; String name2 = "Helena Ohara"; int name1length = name1.length() - 1; int name2length = name2.length() - 1; System.out.println(name1 + "'s name is " + name1length + " letters long."); System.out.println(name2 + "'s name is " + name2length + " letters long.");
코드를 실행하면 다음과 같은 결과가 출력됩니다:
William Carter's name is 13 letters long. Helena Ohara's name is 11 letters long.
학생들의 이름을 저장하는 변수 name1과 name2를 정의했습니다. 그런 다음 length() 메서드로 각 문자열의 길이를 계산했습니다. 이름 중간의 공백을 제외하기 위해 각 길이에서 1을 빼준 점에 주목하세요.
마지막으로 각 이름의 길이를 알려주는 메시지를 출력했습니다.
문자열 안에서 특정 문자열 찾기
어떤 문자열 안에서 다른 문자열을 찾고 싶을 때가 있습니다. 이럴 때 indexOf() 메서드가 유용합니다. 이 메서드는 특정 텍스트가 문자열 내에서 처음 등장하는 위치를 반환합니다.
작동 방식을 살펴보기 전에 인덱스(index) 개념을 간단히 짚고 넘어가야 합니다. 자바에서 문자열은 인덱스 번호로 색인됩니다. 즉, 문자열의 모든 문자에는 고유한 번호가 할당되며, 이 번호를 사용해 각 문자에 개별적으로 접근할 수 있습니다.
"William Carter" 문자열의 인덱스 구조는 다음과 같습니다:
| W | i | l | l | i | a | m | C | a | r | t | e | r | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
문자열의 모든 문자에 인덱스 번호가 할당되며, 공백도 포함된다는 점에 주목하세요. 또한 0부터 세기 시작한다는 점도 중요합니다. 자바에서 문자열은 0부터 인덱싱되기 때문입니다.
이 문자열에서 "Carter"가 어디에 위치하는지 찾고 싶다고 가정해 보겠습니다. indexOf() 메서드를 다음과 같이 사용할 수 있습니다:
String name = "William Carter";
int position = name.indexOf("Carter");
System.out.println("Carter appears starting at index value " + position);실행 결과: Carter appears starting at index value 8. indexOf()는 해당 문자가 나타나는 인덱스 위치를 반환합니다.
두 문자열이 같은지 확인하기
문자열 비교는 프로그래밍에서 매우 자주 등장하는 작업입니다. 로그인 폼에 비밀번호를 입력하는 상황을 생각해 보세요. 애플리케이션은 무엇을 할까요? 사용자가 입력한 비밀번호와 데이터베이스에 저장된 비밀번호를 비교합니다.
사용자의 비밀번호가 올바른지 확인하는 프로그램을 작성한다고 가정해 보겠습니다. 새 자바 파일을 열고 다음 코드를 메인 프로그램에 붙여넣으세요:
String entered_password = "Test123";
String saved_password = "Test12345";
boolean compare_passwords = entered_password.equals(saved_password);
System.out.println("Does the entered password match the saved password? " + compare_passwords);실행 결과:
Does the entered password match the saved password? false
프로그램은 entered_password와 saved_password라는 두 문자열이 같은지 확인합니다. 이 검사는 equals() 메서드로 수행하며, 두 문자열이 같으면 true, 그렇지 않으면 false를 반환합니다.
이제 entered_password의 값을 saved_password와 같게 바꿔 보겠습니다:
String entered_password = "Test12345"; String saved_password = "Test12345"; ...
이 코드를 실행하면 프로그램은 다음을 출력합니다:
Does the entered password match the saved password? true
두 문자열이 일치하므로 equals() 메서드는 true로 평가됩니다.
특수 문자 처리하기
문자열은 반드시 큰따옴표 안에 작성해야 합니다. 별 문제 없어 보이지만, 문자열 안에 큰따옴표를 포함하고 싶을 때는 오류가 발생합니다.
이 오류를 해결하는 방법은 백슬래시(\) 문자를 사용하는 것입니다. 백슬래시는 바로 뒤에 오는 문자를 특수 문자로 변환합니다. 다음 예시를 살펴보세요:
String statement = "Your order for \"Chocolate Chip Cookie x2\" was processed.";
이 문자열은 문자열 내의 각 큰따옴표 앞에 백슬래시를 지정했기 때문에 프로그램에서 문제없이 동작합니다. 출력 결과: Your order for Chocolate Chip Cookie x2 was processed.
그런데 이번에는 또 다른 문제가 생깁니다. 문자열 안에 백슬래시 자체를 사용하고 싶다면 어떻게 해야 할까요? 이 경우 백슬래시 두 개를 나란히 작성하면 됩니다:
String order_reference = "Your order reference is 202\\303."
출력 결과: Your order reference is 202\303.
자바에서 사용할 수 있는 특수 문자는 이 외에도 여러 가지가 있습니다. 그중 가장 유용하게 쓰이는 것 중 하나가 \n, 즉 줄 바꿈(new line) 문자입니다. 이 문자는 문자열 안에서 새 줄을 만듭니다:
String order_reference = "Your order reference is: \n 202\\303."
이 문자열은 다음과 같이 출력됩니다:
Your order reference is:
202\303
is: 부분 뒤에 줄 바꿈 문자를 지정했기 때문에 문자열이 두 줄로 나뉘어 출력됩니다.
마무리
문자열을 사용하면 프로그램에서 텍스트 데이터를 자유롭게 다룰 수 있습니다. 문자열은 어떤 개수의 문자든 담을 수 있으며, 문자가 하나도 없는 빈 문자열도 가능합니다.
indexOf(), equals() 같은 문자열 메서드를 활용하면 자바에서 문자열의 내용을 손쉽게 조작할 수 있습니다. 이제 여러분도 전문가처럼 자바에서 문자열을 다룰 준비가 되었습니다!