티스토리 뷰

Language/Java

[Java] StringBuffer & StringBuilder

DUCKBAE's 2022. 6. 22. 23:48

StringBuffer, StringBuilder 클래스는 가변(mutable) 클래스이다.

 

StringBuffer

StringBuffer클래스는 가변 클래스이기 때문에, 동일 객체 내에서 문자열 변경이 가능하다.

StringBuffer의 인스턴스를 생성할 때, 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용된다.

StringBuffer(int length)를 사용해서 StringBuffer 인스턴스에 저장될 문자열의 길이를 지정할 수 있다.

버퍼의 크기를 지정해주지 않으면 16개의 문자를 저장할 수 있는 크기의 버퍼를 생성한다.

 

 

문자열 생성 방식

StringBuffer sb = new StringBuffer("hello");
sb.append("java");

append()는 반환타입이 StringBuffer인데 자신의 주소를 반환한다.

따라서 처음 StringBuffer 인스턴스를 만들고 연속 append()를 사용해도 해당 인스턴스에 대한 내용이 바뀔 뿐, String 처럼 추가 인스턴스를 생성하지 않는다.

 

비교

StringBuffer클래스는 equals메서드를 오버라이딩하지 않아서 StringBuffer클래스의 equals메서드를 사용해도 false가 나온다.

따라서 StringBuffer인스턴스에 담긴 문자열을 비교하기 위해서는 StringBuffer 클래스의 toString() 함수를 호출해서 String 인스턴스를 얻은 다음, equals 메서드를 사용하여 비교해야 한다.

StringBuffer sb = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("hello");

String str = sb.toString(); // StringBuffer를 String으로 변환
String str2 = sb2.toString();

System.out.print(str.equals(str2)); // true

 

StringBuilder

문자열 생성 방식

StringBuilder sb = new StringBuilder("hello");
sb.append("java");

 

 

StringBuffer & StringBuilder 차이

동기화 여부

StringBuffer 클래스는 멀티 쓰레드 환경에 Thread Safe 하도록 동기화 되어있다.

따라서, 멀티 쓰레드 환경에서 문자열의 추가, 수정, 삭제 등이 빈번하게 일어나는 경우 사용하는 것이 좋다.

  • 메서드에서 syncronized 키워드를 사용한다.

StringBuilder 클래스는 동기화를 지원하지 않기 때문에 Thread Safe 하지 않다.

따라서, 단일 쓰레드 환경에서 문자열의 추가, 수정, 삭제 등이 빈번하게 일어나는 경우 사용하는 것이 좋다.

 

참고

Java의 정석

'Language > Java' 카테고리의 다른 글

[Java] Thread  (0) 2022.06.28
[Java] Stack & Queue  (0) 2022.06.27
[Java] String  (0) 2022.06.21
[Java] 변수  (0) 2022.06.12
[Java] JVM 메모리 관리  (0) 2022.06.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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 31
글 보관함