[JAVA] StringBuilder를 JAVA

wannabeing·2025년 3월 13일
1

JAVA

목록 보기
1/3

튜터님께서 +로 문자열을 입력하는 것보다 StringBuilder를 사용해보라고 권유해주셨다. StringBuilder에 대해 알아보자!

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다.

덧셈 (+) 연산자의 단점

1. 메모리 공간낭비 및 속도 저하

덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면
결합한 내용이 합쳐진 새로운 String 인스턴스를 생성하게 되어서
많이 결합할수록 메모리 공간 낭비와 속도가 느려지게 된다는 단점이 있다고 한다.

2. 가독성 떨어짐

덧셈 연산자로 이으는 것이 길어지면 길어질 수록, 가독성이 떨어진다고 한다.


String 객체는

자바에서는 String 객체의 값은 변경할 수 없다.
이는 한번 할당된 공간이 변하지 않는다고 해서
'불변(immutable)' 자료형 이라고 한다.

따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고,
이전 문자열은 가비지 컬렉터로 들어간다.

💡 자바 언어에서 String을 불변으로 설정한 이유

캐싱, 보안, 동기화, 성능측면 이점을 얻기 위해서이다.


1.캐싱 : String pool에 각 리터럴 문자열의 하나만 저장하여
다시 사용하거나 캐싱에 이용하여서 힙 공간을 절약하기 위해서이다.

2.보안 : DB 관련 정보는 문자열로 전달되는데,
문자열 값이 변경이 가능하다면 참조 값을 변경할 수 있기 때문에 불변으로 설정했다.

3.동기화 : 동시에 실행되는 여러 스레드에서 안정적이게 공유하기 위해서이다.

반면에 StringBuilder, StringBuffer는

가변 클래스이다.

내부적으로 버퍼(buffer)라고 하는 임시 공간에
문자열을 바로 추가할 수 있어 공간의 낭비가 없다.

따라서 값이 변경될 때마다 새로운 객체를 만드는 String보다 훨씬 빠르다.


StringBuilder는 어떻게 쓰는게 제일 빠를까?

보통 메서드 안에서 객체생성해서 사용하던데..
나는 가독성 및 유지보수성을 생각해서
전역에 생성하고, 각 메서드에서 초기화해서 쓰고 싶었다.
그럼 어떻게 쓰는게 제일 빠를까?

delete() 함수나 setLength() 함수를 사용하는게 제일 빠르다고 한다.
내가 사용하는 프로젝트에선 별로 차이없겠지만.. 그래도 알고 있으면 좋을 것 같다.

근거자료는 ➡️ StringBuilder는 어떻게 쓰는게 제일 빠를까?


💡StringBuilder vs StringBuffer의 차이

  1. 동기화 지원여부
    멀티쓰레드 환경에서 안정적인 StringBuffer를 사용하는 것이 적절하다고 한다.
  2. 순수 성능 비교
    순수 성능에서는 StringBuilder가 더 빠르다고 한다.
    단일 쓰레드 환경이고, 문자열 추가가 많다면 StringBuilder를 사용하는 것이 좋다고 한다.

그래서 뭘 쓰는게 좋을까?

자바를 활용한 프로젝트는 보통 멀티쓰레드 환경에서 돌아가고,
비동기 동작이 많으므로 안정성을 고려하여 StringBuffer로 통일하는 것이 좋다고 한다.


출처

String-StringBuilder-StringBuffer 차이점 및 성능비교
StringBuilder를 쓰는 이유
덧셈 연산이 많으면 성능이 안좋은 이유
StringBuilder란?

profile
wannabe---ing

0개의 댓글