[Java] StringBuilder

Jeini·2022년 12월 2일
0

☕️  Java

목록 보기
33/70
post-thumbnail

기능은 StringBuffer 와 유사하다.

✨ StringBuilder란?

자바에서 문자열을 효율적으로 이어붙이거나 수정할 수 있는 클래스

  • String은 불변(immutable) 이라서, + 연산할 때마다 새로운 객체가 만들어진다 → 성능이 떨어짐

  • StringBuilder는 가변(mutable) 이라서, 같은 객체 안에서 문자열을 직접 바꾸기 때문에 빠르고 메모리 효율적임


🛠 주요 특징

1. 가변성

  • 문자열을 수정해도 새로운 객체를 만들지 않고 기존 버퍼에서 변경함

2. 단일 스레드 환경에서 빠름

  • StringBuffer 와 달리 동기화(synchronized) 처리가 안 되어 있어서 → 멀티스레드 환경에서는 안전하지 않지만, 그만큼 속도는 더 빠름

3. 버퍼(Buffer) 기반

  • 내부적으로 가변 크기의 char[] 배열을 사용해서 문자열을 관리함

❗️ 동기화
: 멀티 쓰레드에 안전하게 하는 것 (thread - safe)
: 데이터 보호

밑에 쓰레드의 내용은 참고만 하자. 나중에 자세히 공부하는 걸로!

쓰레드는 2가지로 분류된다.

  1. 싱글 쓰레드: 한번에 1개 작업 (지금까지 했던거 다 싱글쓰레드)
  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 vs StringBuilder vs StringBuffer

클래스불변/가변멀티스레드 안전성속도
String불변(immutable)O느림
StringBuilder가변(mutable)X빠름
StringBuffer가변(mutable)O느림 (동기화 때문에)

References
: https://cafe.naver.com/javachobostudy

profile
Fill in my own colorful colors🎨

0개의 댓글