Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# StringWriter와 StringReader 완벽 비교: 개념, 차이점, 실전 예제

C#에서 StringWriterStringReader는 메모리상의 문자열을 대상으로 입출력을 처리하는 클래스입니다. StringWriter는 TextWriter를 상속하고, StringReader는 TextReader를 상속합니다. 두 클래스를 함께 사용하면 파일이나 네트워크 스트림 없이도 문자열 데이터를 스트림처럼 자유롭게 읽고 쓸 수 있습니다.

StringWriter란?

StringWriter는 문자열 버퍼에 정보를 기록하기 위한 TextWriter 구현체입니다. 파일 시스템에 접근하지 않고 StringBuilder 내부에 텍스트를 작성할 때 유용하며, ToString() 메서드를 호출해 지금까지 작성한 내용을 즉시 확인할 수 있습니다.

아래 예제는 문자열을 한 글자씩 읽어 들인 뒤, 마침표(.)를 만날 때마다 줄바꿈을 추가하여 문단을 나누는 코드입니다.

using System;
using System.IO;

class Program {
   static void Main() {
      string text = "Hello World. This is C#. Nice to meet you.";
      StringWriter sWriter = new StringWriter();

      using (StringReader sReader = new StringReader(text)) {
         while (true) {
            int value = sReader.Read();
            if (value == -1) break; // 문자열 끝에 도달하면 종료

            char convertedChar = Convert.ToChar(value);
            if (convertedChar == '.') {
               sWriter.Write(".\n\n"); // 마침표 뒤에 줄바꿈 추가
            } else {
               sWriter.Write(convertedChar);
            }
         }
      }

      Console.WriteLine(sWriter.ToString());
   }
}

StringReader란?

StringReader는 문자열을 순차적으로 읽기 위한 TextReader 구현체입니다. StringBuilder로 조립한 문자열을 마치 스트림처럼 다룰 수 있으며, Read(), ReadLine(), ReadToEndAsync() 같은 다양한 읽기 메서드를 제공합니다.

아래 예제는 StringBuilder에 여러 줄의 텍스트를 추가한 후, StringReader로 전체 내용을 비동기 방식으로 읽어 출력하는 코드입니다.

StringBuilder sbuilder = new StringBuilder();

// 문자열 추가
sbuilder.AppendLine("첫 번째 줄입니다.");
sbuilder.AppendLine("두 번째 줄입니다.");
sbuilder.AppendLine("세 번째 줄입니다.");

// 문자열 읽기
using (StringReader sReader = new StringReader(sbuilder.ToString())) {
   string readString = await sReader.ReadToEndAsync();
   Console.WriteLine(readString);
}

핵심 차이점 요약

구분StringWriterStringReader
상속 클래스TextWriterTextReader
역할문자열 버퍼에 데이터 쓰기문자열에서 데이터 읽기
주요 메서드Write(), WriteLine(), ToString()Read(), ReadLine(), ReadToEndAsync()
활용 사례템플릿 생성, 로그 조립, XML 직렬화텍스트 파싱, 줄 단위 처리, 비동기 읽기

정리

StringWriter는 쓰기(Write), StringReader는 읽기(Read) 전용 도구라고 기억하면 됩니다. 두 클래스는 모두 메모리 기반으로 동작하기 때문에 가볍고 빠르며, 임시 텍스트 처리나 단위 테스트에서 특히 유용하게 활용됩니다.