[JAVA] String, StringBuilder

JUNYOUNG·2024년 3월 26일
0

Java 개발을 하다 보면 문자열을 많이 다루게 됩니다.
이 글에서는 StringStringBuilder 클래스가 무엇인지, 왜 사용하는지, 어떻게 사용하는지, 그리고 둘 사이의 차이점을 알아보겠습니다.

String

Java에서 String 클래스는 문자열을 표현합니다. String 객체는 불변(immutable)이라는 중요한 특성을 가지고 있습니다. 이는 한 번 생성된 String 객체의 내용이 변경될 수 없다는 것을 의미합니다. String 객체의 내용을 변경하는 것처럼 보이는 모든 연산은 실제로 새로운 String 객체를 생성합니다.

왜 사용하는가?

String은 불변성으로 인해 코드가 간결하고 안전하며, 가독성이 높습니다. 문자열 상수와 표현식이 자주 사용되는 경우에 적합합니다. 불변성 덕분에 String 객체는 안전하게 공유될 수 있으며, 멀티스레드 환경에서도 안전합니다.

사용 예제

String greeting = "Hello"; 
String fullGreeting = greeting + ", World!";
System.out.println(fullGreeting); 
// 출력: Hello, World!

위 예제에서 + 연산자는 greeting 문자열과 ", World!" 문자열을 결합하여 새로운 String 객체 fullGreeting을 생성합니다.

StringBuilder

StringBuilder 클래스는 가변(mutable) 문자 시퀀스를 제공합니다. StringBuilder를 사용하면 문자열을 더 효율적으로 추가, 수정, 삭제할 수 있습니다. 내부적으로 가변적인 문자 배열을 사용하여 작업을 수행합니다.

왜 사용하는가?

문자열의 내용이 자주 변경되거나, 문자열 조작 작업이 많은 경우 StringBuilder를 사용하는 것이 좋습니다. StringBuilder는 내부 버퍼를 재활용하기 때문에 문자열 조작 시 성능이 향상됩니다. 이는 불필요한 객체 생성을 줄이고 메모리 사용을 최적화합니다.

사용 예제

StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!");
System.out.println(sb.toString());
// 출력: Hello, World!

위 예제에서 append() 메소드는 기존 StringBuilder 객체 sb에 문자열을 추가합니다. 이 과정에서 새로운 객체를 생성하지 않습니다.

JVM 에서의 동작

힙 메모리(Heap Memory)

힙 메모리는 모든 Java 객체가 저장되는 곳입니다. StringStringBuilder 객체 모두 여기에 할당됩니다. 힙 메모리는 가비지 컬렉터에 의해 관리되며, 더 이상 참조되지 않는 객체들은 메모리에서 제거됩니다.

String의 동작

String 객체는 힙 메모리에 생성됩니다.
String의 불변성 때문에, 문자열을 수정할 때마다 사실상 새로운 String 객체가 생성되고, 이전 객체는 가비지 컬렉션의 대상이 됩니다.
예를 들어, 문자열을 결합하는 작업은 기존 문자열을 변경하는 것이 아니라, 결합된 새 문자열을 담은 새 String 객체를 생성합니다.

StringBuilder의 동작

StringBuilder도 힙 메모리에 생성되지만, 가변성을 가지고 있어 문자열을 추가하거나 변경할 때 내부적으로 배열을 조정하여 동일한 객체에서 문자열을 변경할 수 있습니다. 이로 인해 빈번한 문자열 조작이 필요한 경우 훨씬 더 효율적으로 작업을 수행할 수 있습니다.

String과 StringBuilder의 차이점

  • 불변성: String은 불변이며, StringBuilder는 가변입니다.
  • 성능: 문자열 조작이 빈번한 경우 StringBuilderString보다 성능이 우수합니다. String 연산은 새로운 객체를 생성하지만, StringBuilder는 내부 배열을 재사용합니다.
  • 사용 시나리오: 간단한 문자열 변경이나 상수 문자열을 사용하는 경우에는 String이 적합합니다. 복잡하거나 빈번한 문자열 조작이 필요한 경우에는 StringBuilder를 사용하는 것이 좋습니다.
profile
Onward, Always Upward - 기록은 성장의 증거

0개의 댓글