Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭

[JAVA] String, StringBuffer, StringBuilder 본문

JAVA

[JAVA] String, StringBuffer, StringBuilder

쪼사원 2024. 4. 11. 11:28

1) String

대표적인 문자열 클래스

String 객체는 한 번 생성되면 할당된 메모리 공간이 변하지 않음.

`+` 연산자 또는 concat 메서드를 통해 문자열을 연결할 수 있음.

String 클래스 객체는 Heap 메모리 영역에 생성되어 한 번 생성된 객체의 내부 내용을 변화시킬 수 없음.

기존 객체가 제거되면 Java의 가비지 컬렉선이 회수함.

String 객체는 이러한 이유로 문자열 연산이 많은 경우, 성능이 좋지 않음.

 

하지만, Immutable(불변)한 객체는 간단하게 사용 가능하고, 동기화에 대해 신경쓰지 않아도 되기 때문에 내부 데이터를 자유롭게 공유 가능함.

 

 

2) StringBuffer, StringBuilder

이 둘은 기존의 버퍼 크기를 늘리며 유연하게 동작함.

StringBuffer와 StringBuilder 클래스가 제공하는 메서드는 서로 동일함.

>> 두 클래스의 차이점 ??  동기화 여부

StringBuffer는 동기화를 지원, StringBuilder는 동기화를 보장하지 않음.

 

🔽 정리

  • String은 짧은 문자열을 더할 경우 사용 👍
  • StringBuffer는 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용 👍
  • StringBuilder는 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 👍

 

  • 문자열 변경이 빈번하지 않는다면 String 사용 👍
  • 문자열이 빈번하게 변경되면서 멀티스레드 환경이라면 StringBuffer 사용 👍
  • 문자열이 빈번하게 변경되면서 멀티스레드 환경이 아니라면 StringBuilder 사용 👍

 

단순히 성능만 놓고 본다면 연산이 많은 경우, StringBuilder > StringBuffer >>> String 이라구 한다!

 

✅ StringBuilder, StringBuffer 클래스 사용 및 메서드

 

★ StringBuffer와 StringBuilder는 사용법이 같음

 

🔽 생성

// 기본 생성자
StringBuilder sb = new StringBuilder();

// int size 값을 인자로 하는 생성자
StringBuilder sb = new StringBuilder(20);

// String 문자열을 인자로 하는 생성자 >> 제일 많이 사용
StringBuilder sb = new StringBuilder("Hello");

 

 

🔽 메소드

 

1. append() : 문자열을 추가하기 위해 사용

 

2. length(), capacity() : 문자열의 길이를 구할 때 사용, 문자열에 할당된 capacity를 구할 때 사용

capacity ? StringBuilder 내부의 문자열을 저장하기 위한 버퍼의 총 갯수

 

3. insert() : 문자열을 맨 뒤에 삽입하는 append()와 달리 시작 인덱스를 지정하여 원하는 위치에 삽입 가능

ex) sb.insert(5, "hi"); // 5번째 인덱스에 hi를 추가함

 

4. reverse() : 문자열을 뒤집을 때 사용함

 

5. delete(), deleteCharAt() : 인덱스를 지정하여 문자열의 일부를 삭제하거나, 한 문자만 삭제할 때 사용

sb.delete(1, 3); // 1번 인덱스부터 2번 인덱스까지 삭제 (end-1 까지 삭제됨)

sb.deleteCharAt(3); // 3번째 인덱스 삭제

 

6. replace() : 문자열의 일부분을 다른 문자열로 치환할 수 있음

sb.replace(1, 5, "어쩌구"); // 1번 인덱스부터 4번 인덱스까지 "어쩌구"로 치환하겠다

'JAVA' 카테고리의 다른 글

[JAVA] jdk 환경변수 설정 해주는 이유 ??  (0) 2024.04.08