ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 버퍼 VS 빌더 VS String _ 코딩 테스트(개념편 java)
    알고리즘/문자열 2025. 1. 22. 15:38

    ▤ 목차

       

      저는 java로 지원할 예정이기에 문제 풀이 언어는 java입니다.

       


      헷갈리는 개념

      1️⃣ 버퍼(buffer) 빌더(builder) 그리고 String

      버퍼( buffer )

      - 메모리 공간을 의미한다. 데이터를 임시로 저장하는 메모리 영역이다.

      입출력(I/O) 작업에서 데이터를 효율적으로 읽거나 쓸때 사용된다. 한번에 데이터를 읽지않고 버퍼를 통해 일정 크기 단위로 데이터를 읽거나 쓴다. (읽기만 하는게 아님, 읽을때만 사용하지도 않)

      - I/O 성능을 개선하기 위해 일시적으로 저장한다.

       

      예를 들어 파일을 읽을때 버퍼를 사용하면 파일의 내용을 작은 단위로 나누어 처리하고 한번에 큰 데이터를 메모리에 다 올려 놓지 않으므로 메모리 사용을 최적화할 수 있다.

       

      빌더( builder )

      - 문자열을 효율적으로 조합할 수 있는 클래스 (즉, 주로 문자열 처리에 사용)

      - StringBuilder StringBuffer가 대표적인 빌더 클래스

       

        버퍼(buffer) 빌더(builder)
      동기화 동기화가 되어있어 멀티스레드 환경에서 안전 동기화(synchronization)가 없다.
      사용 데이터를 임시 저장하는 공간
      주로 파일 I/O 네트워크 I/O에서 사용
      문자열을 효율적으로 수정할 수 있는 클래스

       

      일반적으로 StringBuilder가 성능면에서 더 낫다.

       

      String

      String은 불변(immutable)객체이다.

      한번 생성된 String 객체는 값을 변경할 수 없고 값을 변경하려면 새로운 객체가 생성된다.

      (-> 즉, 메모리가 소모됨)

       

      StringBuilder / StringBuffer 는 가변(mutable) 객체이다.

      문자열을 수정한다면 String보다 성능이 훨씬 빠르고 효율적이다.

       

      예시

      더보기
      public class Example {
          public static void main(String[] args) {
              // String 예시
              String str1 = "hello";
              str1 += " world"; // 새로운 문자열이 생성됨 > 즉, 다른 메모리 공간을 소모함
              
              // StringBuilder 예시
              StringBuilder sb = new StringBuilder("hello");
              sb.append(" world"); // 기존 객체에 문자열이 추가됨
              
              System.out.println(str1);  // 출력: hello world
              System.out.println(sb.toString());  // 출력: hello world
          }
      }

       

      StringBuilder를 사용하면 메모리 효율적이고 빠를 수밖에 없다.

       

      StringBuffer :  I/O 작업에서 데이터를 효율적으로 읽고 쓸 수 있도록 함.

      StringBuilder :  문자열의 수정을 효율적으로 처리함.

      String : 한번 생성하면 메모리에 고정적임.

       

       

      🙉 아니 그럼 String은 잘 사용안해?

      정말 많이 사용한다. 불변이라는게 꼭 단점으로 적용하진않는데,

       

      1. 멀티스레딩 환경에서 안전

      여러 스레드가 같은 String 객체를 동시에 읽어도 문제가 발생하지 않는다.

       

      2. 메모리 관리 효율성

      메모리 관리 측면에서도 String은 효율적인 문자열 처리 방식이다.

      왜? 고정적이니깐.

      String은 내부적으로 문자열 풀(String pool) 을 사용하여 중복된 문자열을 공유한다. 동일한 값의 문자열이 여러번 생성되지 않도록 최적화 된다.

       

      그러니 수정이 적고(거의 없고) 결합이 적은 경우, String을 사용하는 것이 자연스러운 선택이다.

       

      아, 모르겠고 그냥 정리하자면?

       

      자주 수정하는 문자열임 >  StringBuilder

      자주 수정도 안하고 그대로 사용 할거임 > String

      대용량의 데이터를 효율적으로 읽고 쓸거임(I/O) > StringBuffer

       

       

    Designed by Tistory.