날아라쩡글이의 블로그입니다.

StringBuilder, StringBuffer 본문

중앙 HTA (2106기) story/java API story

StringBuilder, StringBuffer

날아라쩡글이 2021. 10. 3. 08:18
반응형
  1. StringBuilder
  2. StringBuffer

둘의 사용방법은 동일하다. 

String이란 문자열 자체를 표현하는 객체이다. 문자열의 표현이라고도 불린다. 

  • String의 경우 불변성으로 인하여 +연산자를 이용하여 값을 연결시키면 연산시킬 때마다 새로운 String 객체가 생성된다. 
  • "홍길동" + 100 + 70 + 60;
  • "홍길동" 새 String 객체가 생성된다. 
  • "홍길동100"  새 String객체가 생성된다. 
  • "홍길동10070"  새 String객체가 생성된다. 
  • "홍길동1007060" 새String객체가 생성된다. 
  • 최종 문자열 "홍길동1007060"이 만들기 위해서 String의 객체3개가 추가로 생성되었다. 
  • 따라서 , +연산자를 사용하는 것은 불필욜한 String객체를 생성하게 되고, 메모리 낭비의 원인이 된다. 
  • for문을 사용하고 있을 경우 100명이 접속하게 되면? 1초마다 불필요한 객체가 3000개씩 만들어진다.

그렇게 만들어진 것이 StringBuilder/ StringBuffer이다. 

  • 내부에 Buffer라는 배열이 존재하여 append를 사용하여 쌓는 방식을 가진다. 
  • Buffer는 버퍼링할 때의 그 버퍼이다. 
  • 장점으로는 불필요한 객체가 생성되지 않는다. 
  • StringBuilder의 Buffer에 순서대로 저장된다. 
  • String text = sb.toString(); 을 통해서 저장된 모든 값이 하나의 문자열로 반환된다. 
  • String 객체내의 전체가 획득할 수 있다. 
  • StringBuilder는 Object의 메소드인 toString()을 재정의해서 버퍼에 저장된 값을 하나의 문자열로 반환하게 했다. 
  • toString의 결과값은 원래 클래스name@hashcode의 형태를 가지고 있다. 그러나 하나의 Buffer값이 출력되도록 메소드를 재정의했다. 
  • StringBuffer도 동일하다.

StringBuilder란 thread-unsafe로 안전하지 않고 빠른형태를 가지고 있다.

  • 가게 노점상을 생각하면 된다.
  • 주인은 한명인데 주문은 각기 하고 있어서, 주문이 헷깔리거나, 누락되는 경우가 있다. (컴퓨터상에서는 오류라고한다.)
  • 동시에 여러 요청을 하는 것하고 중간중간에 일처리가 진행되면 mutilThread환경이라고 한다.
  • 멀티쓰레드가 실행된다고 한다. 
  • unsafe하다라는 뜻은 동시 여러 요청시에는 혼자서 처리하고, 순서와 값이 우선순위가 변경되어서 값이 안전하게 유지되지 않는다는 것이다.
  • 시분할이 되어있는 환경에서, 우선순위는 방법에 따라서 다르지만(먼저도착, 오랫동안기다릴경우, 대기시간이 얼마남지 않은경우), 객체들이 Lock Pool에 들어가 있어서 LockKey를 찾고, 사용을 다했으면 다시LockPool에 열쇠를 던져 찾는 방식으로 각각 key를 갖게 된다. 

StringBuffer란 A thread-safe로 안전하지만 느린 형태를 가지고 있다. 멀티가 되지않는다. 

  • 1사람당 1사람의 처리를 하기 때문에 속도가 느리지만 안전하게 데이터를 유지할 수 있다. 
  • Lock,Key를 사용하여 동시요청시 한사람의 요청만을 지원한다. 
  • Buffer에는 Synchronized append라는 메소드가 추가가 되어있다. 
  • 제일 먼저 도착한 객체가 잠그고 메소드를 다 실행하면 다른 요청을 실행한다. 

사용법은 동일하다. Ctrl +마우스오른쪽 ->Scource -> toString()에 Builder라는 옵션이 존재한다. 전부 연결할껀지에 대한 물음이다. 코딩가이드가 문자열 더하기로 쓰지마세요라고 작성이 되어있으면 Builder, Buffer을 사용하면 된다. 

 

반응형

'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글

Set interface, List interface(iterator)  (0) 2021.10.07
Generic(제네릭)  (0) 2021.10.05
System, Wrapper, math class  (0) 2021.10.03
String Class  (0) 2021.10.01
java API, java.Lang  (0) 2021.09.30
Comments