String 클래스 와 StringBuilder 클래스 차이 [C#]

공부/C#  2012.09.25 09:00

안녕하세요. 명월입니다.
이번 포스트는 String과 StringBuilder에 대해 공부하겠습니다. 지금까지 String을 하나의 클래스가 아닌 데이터 타입인 형태로 공부를 해왔습니다.
기본적으로 원래 프로그램은 String 데이터 타입은 존재하지 않고 char 배열형식의 클래스형식입니다.
String에 대한 설명을 MSDN에서 확인해 보겠습니다.


MSDN 링크 - String 클래스



String의 데이터는 일단 만들어지면 값을 수정할 수 없는 읽기 전용입니다. 우리가 쉽게 String의 값을 연산자를 수정하거나 추가하는 하는 듯하지만 실제는 수정 시마다 새 String을 선언하여 교체하는 형식으로 사용하는 것입니다. 즉, 코드상의 String 객체의 수정하는 행위는 매우 많은 퍼포먼스를 사용하는 결과가 되는 것입니다.
실제로 내용을 수정, 추가하는 방식은 StringBuilder 클래스를 사용해서 수정하면 되겠습니다.


자주 쓰는 String 함수입니다.




함수 설명
Compare 지정된 두 String 개체를 비교합니다.
Format 지정된 String의 형식 항목을 해당 개체의 값에 맞는 텍스트로 바꿉니다.
Remove 이 인스턴스에서 지정한 수의 문자를 삭제합니다.
Split 지정한 Char 또는 String 배열의 요소에 의해 구분된 이 인스턴스의 부분 문자열이 포함된 String 배열을 반환합니다.
Substring 이 인스턴스에서 부분 문자열을 검색합니다.
Trim 지정된 모든 문자를 이 인스턴스의 처음과 끝에서 모두 제거합니다.



StringBuilder에 대해 공부하겠습니다.


MSDN 링크 - StringBuilder 클래스


String과 StringBuilder의 가장 큰 차이점은 수정할 수 있나 없냐의 차이입니다. String의 경우에는 수정할 때 새로 인스턴스를 생성하는 형태이지만 StringBuilder의 경우는 지정된 값이 추가, 수정, 삭제가 이루어지는 형태이기에 메모리 사용률, 속도 면에서 String보다 유용합니다.




제 예상보다 훨씬 큰 차이를 보입니다. 단지 하나의 String을 10만 건 처리하는데 20초의 차이가 발생했습니다. 이 차이는 문자열이 많은 프로그램 (웹 문서 분석 프로그램)에서는 String의 처리가 몇억 건이 될 수 있는데 단순 계산으로 해도 2000초 몇십 분의 차이를 발생하네요. 이는 큰 성능의 차이라고 할 수 있겠네요.


댓글 7개가 달렸습니다.
댓글쓰기

  1. 2012.10.05 00:59 신고 |  수정/삭제  댓글쓰기

    감사합니다. ^^ 많이 배워갑니다. 블로그 올 정독해야겠어요 ㅋ

    • 明月 v명월v
      2012.10.05 09:06 신고 |  수정/삭제

      블로그에 방문해 주셔서 감사합니다.
      아직 부족한 점이 많지만 앞으로도 방문해 주시면 감사하겠습니다.

  2. dreamer
    2012.10.05 11:41 신고 |  수정/삭제  댓글쓰기

    MSDN 있는지도모르고 windows form 다루느라 속성 메서드 이벤트 등 뭐가뭔지고 모르고 뒤죽박죽이라 고생이었는데.. 이거덕분에 좀 살겠네요ㅠ 알찬정보 감사합니다^^

    • 明月 v명월v
      2012.10.05 12:48 신고 |  수정/삭제

      안녕하세요.. 제 블로그에 방문해 주셔서 감사합니다.
      MSDN 관한 포스팅은 http://nowonbun.tistory.com/129 에 두었습니다.
      MSDN은 우리 MS 개발자들 사이에서는 성경책이라고 불릴 만큼 개발에 대한 방대한 정보가 수록되어있어요.. 너무 방대해서 찾기가 힘들정도로.
      앞으로도 자주 방문해 주세요.

  3. 지나가는사람~
    2013.09.14 17:24 신고 |  수정/삭제  댓글쓰기

    명월님 덕분에 부족한 기본을 채우고 가요!!

  4. 이틀우유
    2017.05.21 23:41 신고 |  수정/삭제  댓글쓰기

    감사합니다!!
    너무 큰 도움이 되었어요
    다른곳에서 알아보다가 들어오게 되었는데
    쉽고 자세한 설명덕분에 이해하는데 시간이 얼마 걸리지않았어요.
    감사합니다!