(1) 자바의 String 클래스, String의 주요 특징과 핵심 메서드들에 대해 정리해 보고자 합니다.
1. String 클래스
1-1. String 클래스
(1) 문자열을 다루는 데 사용되는 클래스를 의미한다.
(2) 이러한 String 클래스는 char 형식의 문자 배열을 가지고 있고 해당 문자 배열을 다루기 위한 다양한 메서드가 존재한다.
(3) 주요 특징으로 내용을 변경할 수 없는 불변 클래스(Immutable class)로 분류된다.
(4) String에서 덧셈 연산자를 이용한 문자열 결합 성능은 다소 떨어진다.
(5) 문자열 결합이나 수정이 빈번하다면, 내용을 변경할 수 있는 StringBuffer를 사용한다.
1-2. 문자열 비교
String str = new String("abc");
(1) 이렇게 new를 통해 문자열을 생성하면 매번 새로운 객체가 만들어지게 된다.
String str = "abc";
(2) 문자열 리터럴 방식으로 문자열을 생성하면 여러 참조 변수가 해당 문자열의 주소를 공유하게 된다.
(3) 이를 통해 문자열이 같고 다름을 비교할 땐 대입 연산자를 쓰면 안 되고 equals() 메서드(문자열의 내용을 실제로 비교)를 사용해야 한다.
(4) 대입 연산자는 문자열의 주소를 비교하게 된다.
1-3. 문자열 리터럴
(1) 문자열 리터럴의 경우 프로그램이 실제로 실행될 때 자동으로 생성되어 Constant Pool 영역에 저장된다.
(2) 동일한 내용의 문자열 리터럴은 1개만 만들어진다.
(3) 불변 객체이기 때문에 동일한 문자열에 대해 여러 개의 참조 변수가 존재할 경우, 이때 참조 변수들은 모두 동일한 주소를 가리키게 된다.
1-4. 빈 문자열(Empty String)
String str = "";
(1) 빈 문자열은 내용이 없는 문자열로 길이가 0인 char형 배열을 저장하는 문자열이다.
(2) 길이가 0인 배열을 생성하는 것은 어떠한 데이터 타입이든 모두 가능하다.
2. String 클래스의 생성자와 메서드
메서드 | 설명 |
String(String s) | 주어진 문자열을 갖는 String 인스턴스를 생성한다. |
String(char[] value) | 주어진 문자열을 갖는 String 인스턴스를 생성한다. |
String(StringBuffer buf) | StringBuffer 인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스를 반환한다. |
char charAt(int index) | 지정된 인덱스에 있는 문자를 반환한다.(인덱스는 0부터 시작된다.) |
int compareTo(String str) | 파라미터로 넘어온 문자열과 사전 순서로 비교한다. 같으면 0을 사전순으로 이전이면 음수, 이후면 양수를 반환한다. |
String concat(String str) | 문자열을 뒤에 덧붙인다. |
boolean contains(CharSequence s) | 지정된 문자열 s이 포함되어 있는지 여부를 검사한다. |
boolean endsWith(String suffix) | 지정된 문자열 suffix로 끝나는지 여부를 검사한다. |
boolean equals(Object obj) | 매개변수로 받은 문자열 obj와 String 인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르다면 false를 반환한다. |
boolean equalsIgnoreCase(String str) | 문자열과 String 인스턴스의 문자열을 대소문자 구분 없이 비교한다. |
int indexOf(int ch) | 주어진 문자 ch가 문자열에 존재하는지 확인하여 해당 문자가 시작되는 시작점의 인덱스를 반환하게 된다. 찾지 못하면 -1을 반환한다. (인덱스의 시작점은 0부터 시작한다.) |
int indexOf(int ch, int pos) | 주어진 문자 ch가 문자열에 존재하는지 지정된 위치 pos부터 확인하여 위치를 알려주고 찾지 못한다면 -1을 반환한다. (인덱스의 시작점은 0부터 시작한다.) |
int indexOf(String str) | 주어진 문자열이 존재하는지 확인하여 해당 시작점의 인덱스를 알려준다. 없으면 -1을 반환한다. (인덱스의 시작점은 0부터 시작한다.) |
int lastIndexOf(int ch( | 지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치를 반환한다. 만약 찾지 못한다면 -1을 반환한다. |
int length() | 문자열의 길이를 알려준다. |
String[] split(String regex) | 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다. |
String[] split(String regex, int limit) | 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다. 단 문자열 지정된 limit 수로 자르게 된다. |
boolean startsWith(String prefix) | 주어진 문자열 prefix로 시작하는지 검사한다. |
String substring(int begin) String substring(int begin, int end) |
주어진 시작 위치 begin부터 끝 위치 end 범위에 포함된 문자열을 얻는다. 이때 시작 위치의 문자는 범위에 포함되지만, 끝 위치의 문자는 포함되지 않는다. (begin <= x < end) |
String toLowerCase() | String 인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환하여 반환한다. |
String toUpperCase() | String 인스턴스에 저장되어 있는 모든 문자열을 대문자로 변환하여 반환한다. |
String trim() | 문자열의 왼쪽 끝, 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다. 이때 문자열 중간에 있는 공백은 제거되지 않는다. |
static String valueOf(boolean b) static String valueOf(char c) static String valueOf(int i) static String valueOf(long l) static String valueOf(float f) static String valueOf(double d) static String valueOf(Object o) |
지정된 값을 문자열로 변환하여 반환한다. 참조 변수의 경우 toString()을 호출한 결과를 반환하게 된다. |
3. join(), 문자열 ↔ 기본형 타입 변환(Casting)
3-1. join()
(1) join() 메서드는 여러 문자열 사이에 구분자를 넣어서 결합하는 메서드이다.
(2) join() 메서드 없이 단순 문자열을 반복적으로 결합하는 경우 새로운 객체를 계속 만들기 때문에 성능이 떨어질 수 있다. 이러한 문제점을 join()을 통해 해결해 볼 수 있으며 String.join()의 경우 내부적으로 StringBuffer를 사용하도록 코드가 설계되어 있기 때문에 성능적인 측면에서 join() 메서드를 사용해 보도록 권장된다.
String animals = "dog,cat,bear";
String[] arr = animals.split(",");
String str = String.join("-", arr);
System.out.println(str); // dog-cat-bear
3-2. 문자열과 기본형 타입 간의 변환
(1) 숫자를 문자열로 변환
// ex) 100 -> "100"
int i = 100;
String str = i + ""; // 첫 번째 방법
String str2 = String.valueOf(i); // 두 번째 방법
(2) 문자열을 숫자로 변환
// ex) "100" -> 100
int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
Integer i2 = Integer.valueOf("100");
(3) 기본형 → 문자열로 변환
기본형 → 문자열 |
static String valueOf(boolean b) |
static String valueOf(char c) |
static String valueOf(int i) |
static String valueOf(long l) |
static String valueOf(float f) |
static String valueOf(double d) |
static String valueOf(Object o) |
(4) 문자열 → 기본형
문자열 → 기본형 |
boolean Boolean.parseBoolean(String s) |
byte Byte.parseByte(String s) |
short Short.parseShort(String s) |
int Integer.parseInt(String s) |
long Long.parseLong(String s) |
float Float.parseFloat(String s) |
double Double.parseDouble(String s) |
- 현재 자바에서는 편의성 지원을 위해 parseXXX() 메서드 대신 문자열 → 기본형 변환 시에도 valueOf() 메서드가 사용된다.
3-3. 예제 코드
public class Ex9_10 {
public static void main(String[] args) {
int iVal = 100;
String strVal = String.valueOf(iVal); // int -> String
double dVal = 200.0;
String strVal2 = dVal + ""; // int -> String
double sum = Integer.valueOf(strVal) + Double.valueOf(strVal2);
System.out.println(sum);
System.out.println(String.join("", strVal, "+", strVal2, "=") + sum);
System.out.println(strVal + "+" + strVal2 + "=" + sum);
}
}
(1) 실행 결과
4. Reference
(1) 자바의 정석 - 기초편을 참고했습니다.
※ 해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!
'백엔드(Back-End) > Java' 카테고리의 다른 글
[Java] - 자바의 Error와 Exception 이해하기 (0) | 2023.11.06 |
---|---|
[Java] - 자바 가상 머신, JVM(Java Virtual Machine) (0) | 2023.10.19 |
[Java] - 자바 빌드 도구 Maven, Gradle 정리 (0) | 2023.10.19 |
[Java] - 추상 클래스(Abstract class), 추상 메서드(Abstract method) (0) | 2023.01.11 |
[Java] - 제어자, 접근 제어자, 캡슐화, 다형성 (0) | 2023.01.10 |
댓글