String, StringBuffer, StringBuilder의 차이점

iy·2024년 1월 31일

Java

목록 보기
7/8

String

: 문자열을 나타내는 클래스이고 문자열을 조작하는 다양한 메서드를 제공하므로 문자열을 처리하는데 유용

  • String의 한계
    - 불변성(Immutability) : String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않으므로 기존 문자열에 다른 문자열을 붙여만들면 기존 문자열에 추가할 문자열을 붙이는 게 아닌 새로운 String 객체를 생성해 연결된 문자열을 저장함

StringBuffer

: String과 같이 문자열이지만 문자열 연산 등으로 기존 객체의 공간이 부족한 경우 문자열을 동적으로 변경할 수 있는 가변성을 제공함

  • StringBuffer의 한계
    - 동기화(synchronization)(O) : 멀티스레드 환경에서 안전하도록 동기화되지만 단일 스레드 환경에서는 동기화 관련 처리로 인해 성능이 저하될 수 있음

StringBuilder

: StringBuffer처럼 문자열을 나타내는 클래스로 가변성을 제공하고, 동적으로 변경 가능함 동기화된 메서드를 제공하지 않으므로 단일 스레드 환경에서 높은 성능을 제공함

  • StringBuilder의 한계
    - 동기화(synchronization)(X) : 동기화된 메서드를 보장하지 않기 때문에 멀티스레드 환경에서의 사용이 한계가 있음

[정리]

: String, StringBuffer, StringBuilder 모두 문자열을 관리하는 클래스이지만 String은 불변성 때문에 문자열을 조작하는 경우 유용하게 사용할 수 없음 그러므로 이때는 StringBuffer와 StringBuilder의 사용을 권장함
StringBuffer와 StringBuilder는 기존 버퍼 크기를 늘려 유연하게 동작할 수 있지만 StringBuffer는 동기화를 보장해 멀티스레드 환경에서 사용을 권장하고 StringBuilder는 동기화를 보장하지 않아 단일 스레드 환경에서의 사용을 권장함


👀 참고 : 동기와 비동기

- 동기 : 순차적으로 메서드를 호출시켰을 때 이전 메서드의 결과값을 기다리고 그 후에 다음 메서드가 호출됨
- 비동기 : 순차적으로 메서드를 호출시켰을 때 이전 결과값을 기다리지 않음

예전에 정말 잠깐 스터디했을 때 내가 맡아 정리했던 부분이다. 면접 예상 질문이기도 하고 programmers 문제 풀 때 buffer의 사용을 잘 이용하면 좋을 거 같아서 다시 블로그에 작성한다.

0개의 댓글