728x90
자바에서 문자열을 처리할 일은 매우 많다.
예를 들자면 아래와 같은 경우들이 있다.
- 사용자 입력 (Scanner.nextLine())
- 데이터베이스 값 (VARCHAR 같은 문자열 컬럼)
- 파일 읽기/쓰기 (BufferedReader.readLine())
- 로그 기록 (System.out.println("Error: 파일을 찾을 수 없습니다."))
- 웹 개발 (HTML, JSON, XML 등의 데이터 형식)
간단하게 생각했을때 이정도인데 세세하게 들어가면 더더욱 많다.
때문에, 문자열 처리는 필수적이게 되는데 그렇다면 이와 관련된 클래스가 무엇이 있는지 확인해보자.
문자열 처리와 관련된 클래스 String
, StringBuilder
, StringBuffer
에 대해 알아보겠다.
String
String
객체는 불변 → 한 번 생성되면 수정 불가능하다.- 문자열 변경이 필요할 경우, 새로운 문자열 객체가 생성된다 (메모리 낭비 발생 가능).
- 문자열 연산이 적을 때 사용하면 좋다.
- 문자열이 자주 변경되지 않는 경우 사용하면 좋다.
사용 예시
public class StringExample {
public static void main(String[] args) {
String str1 = "Hello"; // 문자열 리터럴 생성
str1 += " World"; // 기존 문자열 수정 → 새로운 객체 생성됨
System.out.println(str1); // Hello World
}
}
str1은 "Hello World"로 변경된 것처럼 보이지만, 사실은 새로운 객체가 생성된 것이다.
public class StringPerformance {
public static void main(String[] args) {
String str = "";
for (int i = 0; i < 10000; i++) {
str += i; // 문자열이 계속 변경될 때마다 새로운 객체 생성됨 → 메모리 낭비
}
System.out.println("완료");
}
이처럼 String
을 반복적으로 변경하는 작업이 많으면 비효율적이게 된다.
StringBuilder
StringBuilder
는 가변 → 문자열 변경 가능.- 새로운 객체를 생성하지 않고 기존 객체 내에서 수정이 가능하다 → 메모리를 효율적으로 사용할 수 있다.
- 싱글 스레드 환경에서 사용한다 (동기화 X, 성능 빠름).
사용 예시
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 기존 객체 내에서 문자열 수정
System.out.println(sb); // Hello World
}
}
StringBuilder
는 기존 객체를 변경하므로, 새로운 객체를 만들지 않아도 된다.
public class StringBuilderPerformance {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i); // 메모리 낭비 없이 문자열 추가 가능
}
System.out.println("완료");
}
}
String
을 사용할 때보다 StringBuilder
가 훨씬 빠르고 효율적이다.
StringBuffer
StringBuffer
도StringBuilder
처럼 가변 객체다.- 멀티스레드 환경에서 안전하게 사용이 가능하다 (동기화 지원).
- 성능은
StringBuilder
보다 약간 느리다 (동기화 비용 발생).
사용 예시
public class StringBufferExample {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // 기존 객체 내에서 문자열 수정
System.out.println(sb); // Hello World
}
}
멀티스레드 환경에서 문자열 변경이 필요한 경우 StringBuffer
를 사용하면 안전하다.
728x90
'자바' 카테고리의 다른 글
[JAVA] 제네릭(Generics) (0) | 2025.03.18 |
---|---|
[JAVA] 어노테이션 (Annotation) (0) | 2025.03.17 |
[JAVA] 인터페이스(Interface) (0) | 2025.03.13 |
[JAVA] 다형성과 정적, 동적 바인딩 (0) | 2025.03.13 |
[JAVA] 추상 클래스(abstract) (0) | 2025.03.13 |