sunni546.log
로그인
sunni546.log
로그인
[Java] String, StringBuffer, StringBuilder
선ㅎㅣ
·
2024년 10월 14일
팔로우
1
Java
String
StringBuffer
StringBuilder
Java
목록 보기
1/1
String
불변(immutable)
한번 생성되면 할당된 메모리 공간이 불변
+
연산자 또는
concat
메서드
기존 문자열에 새로운 문자열을 붙이는 것 X
새로운 String 객체를 만든 후, 새 String 객체에 연결된 문자열을 저장하고 그 객체 참조
String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성
한번 생성된 객체의 내부 내용 변화 불가능
기존 객체가 제거되면 Java의 가비지 컬렉션이 회수
단점: 문자열 연산이 많은 경우, 성능이 좋지 않음
장점:
간단하게 사용 가능
동기화에 대해 신경 쓰지 않아도 되기 때문에(Thread-safe), 내부 데이터를 자유롭게 공유 가능
StringBuffer
가변(mutable)
문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 유연하게 늘림
각 메서드 마다 Synchronized Keyword가 존재하여,
멀티스레드 환경
에서도
동기화
를 지원
멀티스레드 환경이라면 값 동기화 보장을 위해 StringBuffer 사용
StringBuilder
가변(mutable)
StringBuffer와 StringBuilder 클래스가 제공하는 메서드는 서로 동일
동기화를 보장X
단일 스레드 환경이라면 StringBuilder 사용
단일 스레드 환경에서 StringBuffer를 사용한다고 문제가 되는 것은 아님
동기화 관련 처리로 인해 StringBuilder에 비해 성능이 좋지 않음
정리
String
StringBuffer
StringBuilder
가변 여부
불변
가변
가변
스레드 세이프 (Thread-safe)
O
O
X
연산 속도
느림
빠름
아주 빠름
사용 시점
문자열 추가 연산이 적고, 스레드 세이프 환경에서
문자열 추가 연산이 많고, 스레드 세이프 환경에서
문자열 추가 연산이 많고, 빠른 연산이 필요한 경우 & 단일 스레드 환경일 경우
String
짧은 문자열을 더할 경우 사용
문자열 연산이 적고 변하지 않는 문자열을 자주 사용할 경우
멀티쓰레드 환경일 경우
StringBuffer
문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우
스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용
동기화를 지원X → 단일 쓰레드이거나 동기화를 고려하지 않아도 되는 경우
속도에서 StringBuffer 보다 성능이 좋음
StringBuilder
문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우
스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발하는 경우
동기화를 지원X → 멀티 스레드 환경에서도 안전하게 동작
참고
https://velog.io/@dlguswl936/공부한-것-String보다-StringBuilder를-써야할까-String.join은-어떨까
https://inpa.tistory.com/entry/JAVA-%E2%98%95-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90
https://12bme.tistory.com/42
선ㅎㅣ
얍
팔로우
0개의 댓글
댓글 작성