728x90
반응형
StringBuilder와 String의 차이
StringBuilder와 String은 둘 다 문자열을 다루는 클래스라는 건 알고 있지만.. 무슨 차이가 있을까?
1. String
- 불변성(Immutability): String은 불변(immutable)한 클래스이다. 즉, 한 번 생성되면 해당 문자열의 내용을 변경할 수 없다. 문자열을 수정하려면 새로운 String 객체를 생성해야 한다.
- 안전성: 불변성으로 인해 String은 스레드 안전(thread-safe)하며, 동시에 여러 스레드가 문자열에 접근해도 예기치 않은 결과가 발생하지 않는다.
- 메모리 관리: 문자열을 연결하거나 수정할 때마다 새로운 객체를 생성하기 때문에, 메모리 사용량이 늘어날 수 있다.
- 성능: 문자열을 수정할 때마다 새로운 객체를 생성하므로, 문자열 연산이 빈번하게 발생할 경우 성능 저하가 발생할 수 있다.
2. StringBuilder
- 가변성(Mutability): StringBuilder는 가변(mutable)한 클래스이다. 즉, 문자열을 직접 수정할 수 있다. 따라서 새로운 객체를 생성하지 않고도 문자열을 수정할 수 있다.
- 성능: StringBuilder는 문자열을 직접 수정하기 때문에, 문자열 연산이 빠르다. 특히 문자열 연결(concatenation)이 빈번하게 발생할 때 유용하다.
- 스레드 안전성: StringBuilder는 스레드 안전하지 않다. 여러 스레드에서 동시에 접근하면 문제가 발생할 수 있다.
- 메모리 관리: StringBuilder는 내부적으로 버퍼를 사용하여 문자열을 관리하고, 초기 용량(capacity)을 설정하여 필요에 따라 동적으로 메모리를 확장한다.
요약하면, String은 불변성으로 안전하고 예측 가능한 문자열 조작을 보장하지만 성능 저하가 발생할 수 있다.
반면에 StringBuilder는 가변성으로 문자열 조작이 빠르지만 스레드 안전성을 보장하지 않고 초기 용량 설정 등을 고려해야 할 필요가 있다.
선택은 상황과 용도에 따라 달라지고 대게 속도를 위한다면 StringBuilder를 사용하기는 한다.
단일 스레드 환경에서 문자열을 빈번하게 수정해야 한다면 StringBuilder를 사용하는 것이 유리하며, 스레드 안전성이 필요하거나 불변성을 유지해야 할 경우에는 String을 사용하는 것이 좋다.
코드 예시
public class StringBuilderVsStringExample {
public static void main(String[] args) {
// String 예제
String str1 = "Hello";
String str2 = str1; // str2는 str1과 동일한 객체를 참조합니다.
System.out.println("Before String modification:");
System.out.println("str1: " + str1); // "Hello"
System.out.println("str2: " + str2); // "Hello"
str1 = str1 + ", World!"; // 기존 문자열에 ", World!"를 추가한 새로운 String 객체를 생성합니다.
System.out.println("After String modification:");
System.out.println("str1: " + str1); // "Hello, World!"
System.out.println("str2: " + str2); // "Hello"
// StringBuilder 예제
StringBuilder sb1 = new StringBuilder("Hello");
StringBuilder sb2 = sb1; // sb2는 sb1과 동일한 StringBuilder 객체를 참조합니다.
System.out.println("Before StringBuilder modification:");
System.out.println("sb1: " + sb1); // "Hello"
System.out.println("sb2: " + sb2); // "Hello"
sb1.append(", World!"); // 기존 StringBuilder에 ", World!"를 추가합니다.
System.out.println("After StringBuilder modification:");
System.out.println("sb1: " + sb1); // "Hello, World!"
System.out.println("sb2: " + sb2); // "Hello, World!"
}
}
String과 StringBuilder의 사용 차이점이다.
가장 큰 차이라고 생각하는 점은 String은 문자를 합치거나 추가할 때 '+'를 사용한다.
StringBuilder는 리스트처럼 append()메서드를 한다. 이 부분에서 StringBuilder가 훨씬 빠른 것을 볼 수 있다.
하지만 눈에 보이는 속도 차는 아니라서 느낄 수는 없겠지만 성능면에서는 StringBuilder가 우세하다.
728x90
반응형
'Web > JSP' 카테고리의 다른 글
[JSP] 세션(Session) 활용하여 로그인 페이지 데이터 저장, 이동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |
---|---|
[JSP] 로그인, 회원가입 페이지 구현 | 민민의 하드디스크 - 티스토리 (5) | 2023.06.09 |
[JSP] 이클립스에서 JSP와 MySQL 연동하기 | 민민의 하드디스크 - 티스토리 (0) | 2023.06.09 |
[JSP] 이클립스(eclipse) 파일 저장 시 오류 | 민민의 하드디스크 - 티스토리 (2) | 2023.06.07 |