Knowledge/이론

String vs StringBuffer vs StringBuilder

똑똑한망치 2024. 6. 13. 12:34
728x90
반응형

1. String

String과 다른 클래스 (StringBuffer, StringBuilder)의 차이점은 String은 immutable(불변), StringBuffer는 mutable(변함)에 있다.

 

String은 문자열을 대표하는 것으로 문자열을 조작하는 경우 유용하게 사용할 수 있다. 

문자열, 숫자, char 등은 concat할 때 StringBuffer, StringBuilder를 사용할 수 있다. 단, 복잡한 경우에 의미가 있고, 단순한 경우에는 +연산자를 사용해 직접 합치면 된다.

 

String 객체는 한 번 생성되면 할당된 메모리 공간이 변하지 않는다. + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라, 새로운 String 객체를 만든 후, 새 String 객체에 연결된 문자열을 저장하고, 그 객체를 참조하도록 한다.

 

즉, String 클래스 객체는 Heap 메모리 영역(Garbage Collection이 동작하는 영역)에 생성된다. 한 번 생성된 객체의 내부 내용을 변화시킬 수 없고 기존 객체가 제거되면 Java의 가비지 컬렉션이 회수한다.

 

 

2. StringBuffer와 StringBuilder

StringBuffer와 StringBuilder는 String과 다르게 동작한다.

 

문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 늘리며 유연하게 동작한다.

 

두 클래스의 차이점은 

바로 동기화 여부이다.

 

StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하며, 멀티스레드 환경에서도 동기화를 지원한다.

반면, StringBuilder는 동기화를 보장하지 않는다.

 

그렇기 때문에, 멀티스레드 환경이라면 값 동기화 보장을 위해 StringBuffer를 사용하고,

단일 스레드 환경이라면 StringBuilder를 사용하는 것이 좋다.

반응형

'Knowledge > 이론' 카테고리의 다른 글

Redis  (1) 2024.06.18
TDD (Test Driven Development)  (0) 2024.06.14
CI / CD  (0) 2024.06.12
가상화와 컨테이너  (1) 2024.06.12
클라우드 컴퓨팅  (0) 2024.06.12