기능은 StringBuffer 와 유사하다.
✅ 자바에서 문자열을 효율적으로 이어붙이거나 수정할 수 있는 클래스
String은 불변(immutable) 이라서, + 연산할 때마다 새로운 객체가 만들어진다 → 성능이 떨어짐
StringBuilder는 가변(mutable) 이라서, 같은 객체 안에서 문자열을 직접 바꾸기 때문에 빠르고 메모리 효율적임
StringBuffer
와 달리 동기화(synchronized) 처리가 안 되어 있어서 → 멀티스레드 환경에서는 안전하지 않지만, 그만큼 속도는 더 빠름char[]
배열을 사용해서 문자열을 관리함❗️ 동기화
: 멀티 쓰레드에 안전하게 하는 것 (thread - safe)
: 데이터 보호
밑에 쓰레드의 내용은 참고만 하자. 나중에 자세히 공부하는 걸로!
쓰레드는 2가지로 분류된다.
싱글 쓰레드를 예를들어, 채팅창에 상대방이 파일 문서를 보냈는데 내가 그 문서를 다운로드 받으면 그동안 채팅도 못치고 아무것도 동작할 수 없다.
즉, 하나에 한개만 동작하고 동시에 무엇을 할 수 없다. 그것을 싱글쓰레드라고 한다.
그 반대로 동시에 동작할 수 있는 것이 멀티 쓰레드이다.
하지만 다 나름대로 단점이 있다.
한번에 여러번 동작하니까 서로 데이터를 공유한다.
여럿이 동작함으로써, 내가 작업하는동안 다른 사람이 그 데이터를 건들일 수 있다. 그러면 데이터가 꼬이게 된다.
그러한 부분을 막아주는 것이 동기화이다.
✔️ 멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능저하를 일으킨다.
무조건 StringBuffer를 쓸 것이 아니라, 싱글 쓰레드에서는 StringBulder
를 사용하는 것이 좋다. 성능이 조금 향상될 것이다.
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder("Java");
// 문자열 추가
sb.append(" is fun"); // "Java is fun"
// 문자열 삽입
sb.insert(4, " Programming"); // "Java Programming is fun"
// 문자열 삭제
sb.delete(4, 15); // "Java is fun"
// 문자열 뒤집기
sb.reverse(); // "nuf si avaJ"
// 길이 확인
int len = sb.length();
// 문자열 변환
String result = sb.toString();
클래스 | 불변/가변 | 멀티스레드 안전성 | 속도 |
---|---|---|---|
String | 불변(immutable) | O | 느림 |
StringBuilder | 가변(mutable) | X | 빠름 |
StringBuffer | 가변(mutable) | O | 느림 (동기화 때문에) |
References
: https://cafe.naver.com/javachobostudy