[C#] 문자열

Kim Yuhyeon·2022년 3월 28일
0

게임개발

목록 보기
5/135

C# 문자열

문자열(string) 은 프로그램에서 가장 많이 쓰이는 데이터 타입 중의 하나이다.
C#에서 문자열(string)은 이중부호(")를 사용하여 표현되며,
단일 문자(char)는 단일부호(')를 사용하여 표현된다.

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

ex. 일정 문자열 부분만 뽑아내는 Substring() 메서드, 문자열 길이를 구하는 Length 속성 등

C# 문자열은 Immutable 즉, 한번 문자열이 설정되면, 다시 변경할 수 없다.

Immutable Type : 한번 그 값이 설정되면 다시 변경할 수 없는 타입
Mutable Type : 값을 계속 변경할 수 있는 타입

ex. 문자열 변수 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);
      }
   }
}

C# 문자열, 문자, 문자배열

문자열

문자열(string)문자(character)의 집합체이다.
문자열 안에 있는 각 문자를 엑세스하고 싶으면, 인덱스 [] (square bracket)을 사용하여 문자 요소를 엑세스한다.

ex. 문자열 변수 s가 "Hello" 값을 가지고 있을 때

-> s[0] : H, s[1] : e 를 리턴한다.
이는 문자열을 문자배열처럼 취급하는 것으로 일반 C# 배열과 마찬가지로 첫번째 요소는 [0]으로 엑세스한다.

문자 배열

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

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

ex. 문자A 를 갖는 변수에 1을 더하면 66이 되어 문자 B가 된다.

예제

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 출력
      }
   }
}

C# StringBuilder 클래스

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

String 클래스는 위에서 설명한 대로 Immutable이기 때문에, 문자열 갱신을 많이 하는 프로그램에는 적당하지 않다.

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

특히 루프 안에서 계속 문자열을 추가 변경하는 코드에서는 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);
      }
   }
}

💡 참고 포스팅

[예제로 배우는 C# 프로그래미밍] 기초 문법 - C# 문자열

0개의 댓글