본문 바로가기
쿤즈 Dev/Java

[Java] 문자열을 다루는 클래스 (String, StringBuffer, StringBuilder)

by Koonz:) 2023. 9. 5.
728x90

자바에서는 문자열을 다루는 클래스들이 다수 존재한다. 프로그래밍을 하다 보면 많은 문자열들을 다루게 되고 보다 효율적으로 메모리 관리를 하고 싶어 지기 때문이다.

이번 포스팅에서는 클래스별로 문자열을 다루고 저장하는 방법에 대해 알아보자.


String 클래스

'String' 클래스는 자바(Java)에서 문자열을 다루는 가장 기본적인 클래스다. 하지만 'String' 객체는 한 번 생성되면 수정할 수 없다. 즉, 새로운 문자열이 추가되거나 삭제가 필요할 경우, 새롭게 만들어야 하며 원래 문자열은 불변으로 수정이 불가능하다. 

String str = "Hello";
str = str + " World"; // 새로운 객체가 생성됨

이 경우 문자열 연산이 빈번하게 발생할 경우 메모리 사용량이 늘어날 수 있다는 단점을 가지고 있다.


StringBuffer 클래스

'StringBuffer' 클래스는 문자열 연산이 빈번한 경우에 사용하기 좋은 클래스다. 'StringBuffer'는 내부 버퍼에 문자열을 저장하며, 문자열 연산 시 기존 버퍼를 수정하므로 새로운 객체를 생성하지 않는다.

StringBuffer strBuffer = new StringBuffer("Hello");
strBuffer.append(" World"); // 기존 버퍼 수정

따라서 문자열 연산이 많은 경우 'StringBuffer'를 사용하면 메모리와 성능을 효율적으로 관리할 수 있다.


StringBuilder 클래스

'StringBuilder' 클래스는 'StringBuffer'와 비슷한 기능을 제공하지만, 다중 스레스 환경에서의 안전성을 고려하지 않는다. 그 결과 'StringBuilder'는 'StringBuffer'보다 더 빠른 속도를 가진다. 따라서 단일 스레드 환경에서 문자열 연산이 빈번하게 발생하는 경우에는 'StringBuilder'를 사용하는 것이 좋다.

StringBuilder strBuilder = new StringBuilder("Hello");
strBuilder.append(" World"); // 기존 버퍼 수정

정리하면 문자열의 변경이 적고 불변이 많다면 'String', 문자열의 변경이 빈번하게 발생하고 스레드 안전성이 필요하다면 'StringBuffer', 문자열의 변경이 빈번하지만 스레드 안전성이 필요하지 않은 경우라면 'StringBuilder'를 사용하면 된다.

댓글