본문 바로가기
C#/이론

[예제로 배우는 C# 프로그래밍] 문자열

by 단월໒꒱ 2022. 7. 3.

 

C# 문자열

 

 

문자열

 

  문자열(string)은 큰 따옴표(")를 이용하여 표현하고, 단일 문자(char)는 작은 따옴표(')를 이용하여 표현한다.

 

  C#의 키워드 string은 .NET의 System.String 클래스와 동일하며, System.String 클래스의 모든 메서드와 속성을 사용할 수 있다. 

       ex. Substring() : 일정 문자열 부분만 뽑아내기

              Length() : 문자열 길이 구하기

 

  문자열은 Immutable 타입으로, 한번 문자열이 설정되면 다시 변경할 수 없다.

 

  예를 들어, 문자열 변수 s가 있을 때 s = "C#"; 이라고 한 후에 s = "F#"; 이라고 하면 .NET 시스템은 새로운 string 객체를 생성하여 "F#"이라는 데이터로 초기화한 후 이를 변수명 s에 할당한다. 즉, 변수 s는 내부적으로는 전혀 다른 메모리를 갖는 객체를 가리키는 것이다.

 

 

using System;

namespace MySystem
{
   class Program
   {
      static void Main(string[] args)
      {         
         // 문자열(string) 변수
         string s1 = "C#";
         string s2 = "Programming";

         // 문자(char) 변수 
         char c1 = 'A';
         char c2 = 'B';

         // 문자열 결합
         string s3 = s1 + " " + s2;
         Console.WriteLine("String: {0}", s3);

         // 부분문자열 발췌
         string s3substring = s3.Substring(1, 5);
         Console.WriteLine("Substring: {0}", s3substring);
      }
   }
}

 

 

 

 

문자열, 문자, 문자배열

 

  문자열(string)은 문자(character)의 집합체이다. 문자열 안에 있는 각 문자에 접근하고 싶으면 인덱스를 사용하면 된다. 예를 들어, 문자열 변수 s가 "Hello" 값을 갖고 있다고 하면, s[0]은 H가 된다. 이처럼 문자열을 문자 배열처럼 취급한다.

 

  문자 배열(char array)을 문자열(string)으로 변환하기 위해서는 아래와 같이 new string(문자배열)을 사용한다.

 

  하나의 문자는 상응하는 ASCII 코드 값을 가지는데, 예를 들어 대문자 A는 65, Z는 90을 갖고 소문자 a는 97을 갖는다. 하나의 문자는 이처럼 숫자값으로 표현되므로 문자에 숫자를 더하거나 빼면 다른 문자로 표현될 수 있다.

 

 

using System;

namespace MySystem
{
   class Program
   {
      static void Main(string[] args)
      {         
         string s = "C# Studies";

         // 문자열을 배열인덱스로 한문자 엑세스 
         for (int i = 0; i < s.Length; i++)
         {
            Console.WriteLine("{0}: {1}", i, s[i]);
         }

         // 문자열을 문자배열로 변환
         string str = "Hello";
         char[] charArray = str.ToCharArray();

         for (int i = 0; i < charArray.Length; i++)
         {
            Console.WriteLine(charArray[i]);
         }

         // 문자배열을 문자열로 변환
         char[] charArray2 = { 'A', 'B', 'C', 'D' };
         s = new string(charArray2);

         Console.WriteLine(s);

         // 문자 연산
         char c1 = 'A';
         char c2 = (char)(c1 + 3);
         Console.WriteLine(c2);  // D 출력
      }
   }
}

 

 

 

 

StringBuilder 클래스

 

  문자열을 다루는데 중요한 클래스 중 하나는 System.Text.StringBuilder 클래스이다.

 

  String 클래스는 Immutable 타입이기 때문에 문자열 갱신을 많이 하는 프로그램에는 사용하기 적당하지 않다. 반면 StringBuilder 클래스는 Mutable 타입이기 때문에 문자열 갱신이 많은 곳에서 자주 사용되는데, 이는 이 클래스가 별도의 메모리를 생성하거나 없애지 않고 일정한 버퍼를 갖고 문자열 갱신을 효율적으로 처리하기 때문이다.

 

  특히 루프 안에서 계속 문자열을 추가&변경하는 코드에서는 String 대신 StringBuilder를 사용해야 한다.

 

 

using System;
using System.Text;

namespace MySystem
{
   class Program
   {
      static void Main(string[] args)
      {                  
         StringBuilder sb = new StringBuilder();
         for (int i = 1; i <= 26; i++)
         {
            sb.Append(i.ToString());
            sb.Append(System.Environment.NewLine);
         }
         string s = sb.ToString();

         Console.WriteLine(s);
      }
   }
}

 

 

 

 

댓글