C#으로 처음 만드는 프로그램은 보통 Hello World 다. 문자열은 특수한 자료형이다. 참조형 자료형이고 다양한 포맷팅과 메소드가 지원된다.
문자열이 왜 특수할까? 바로 사람이 사용하는 자료형이기 때문이다. 0과1로 컴퓨터는 모든 것을 할 수 있지만 자신에게 지시를 내리는 인간은 문자로 지시를 내려야 한다. 그렇기에 문자열과 0과1 사이에는 여러가지 처리방법이 필요하다.
인간을 위해서 또는 기계를 위해서 필요하다. 아래의 예제는 Hello C Sharp!를 출력한다. Hello World 프로그램과 동일하다. 그런데 string welcome = "Hello C Sharp"라는 문장이 나왔다.
이는 Hello C Sharp라는 문자열을 welcome이라는 이름을 가진 string 참조형에 할당하라는 말이다.
using System;
namespace CSharpBasic
{
class Program
{
static void Main(string[] args)
{
string welcome = "Hello C Sharp!";
Console.WriteLine(welcome);
}
}
}
welcome에는 문자열을 참조한 주소가 들어 있으니까 이것을 인자로 WriteLine 메소드에 보냈다. 결과는
위와 같다. 똑같은 Hello 를 출력하지만 내부에서 일어나는 과정은 달라졌다. 한 단계를 더 거쳐서 온 것 같다.
그렇다면 이런 번거로운 과정이 왜 필요할까? 답은 얼마든지 문자열을 가공해서 출력하기 위해서다.
MSDN의 스타일로 알아보자. 이제 부터는 Main 함수의 내용만 바뀐다.
static void Main(string[] args)
{
string myFriend = "MR.PARK";
Console.WriteLine("Hello! " + myFriend);
}
WriteLine 메소드에서 다양한 것을 해볼 수 있다. 문자열 두개를 연결시켜 출력했다. 이름만 알고 있으면 인사를 할 수 있다.
다음 예제는 이름을 바꾼다.
static void Main(string[] args)
{
string myFriend = "MR.PARK";
myFriend = "Ms. Woo";
Console.WriteLine("Hello! " + myFriend);
}
변수는 변할 수 있는 수라고 했다. 실행시간 도중에 변한다. 물론 문자열은 Main 함수의 스택에서 실제 문자열값의 주소만 저장하고 있다고 했다. 문자열이 바뀌면 새로운 주소로 변경된다.
static void Main(string[] args)
{
string myFriend = "MR.PARK";
myFriend = "Ms. Woo";
Console.WriteLine($"Hello, {myFriend}! Welcome");
}
결과값: Hello, Ms. Woo! Welcome
특수문자$를 앞에 사용하면 변수를 직접 { } 괄호안에 넣을 수 있다.
다음의 예제에서 처럼 두개의 변수도 사용가능하다.
static void Main(string[] args)
{
string Friend1 = "MR.Park";
string Friend2 = "Ms.Woo";
Console.WriteLine($"{Friend1} and {Friend2} are good friends");
}
*문자열 길이
string 형의 멘버변수가 있다. Length는 문자열의 길이를 말한다.
static void Main(string[] args)
{
string Friend1 = "MR.Park";
string Friend2 = "Ms.Woo";
Console.WriteLine($"name length : {Friend1.Length} and {Friend2.Length}");
}
*문자열 자르기
다음은 문자열 양쪽을 잘라내는 메소드이다.
class Program
{
static void Main(string[] args)
{
string trimTest = " Yahoo! ";
Console.WriteLine($"[{trimTest}]");
Console.WriteLine($"[{trimTest.TrimStart()}]");
Console.WriteLine($"[{trimTest.TrimEnd()}]");
Console.WriteLine($"[{trimTest.Trim()}]");
}
}
공백을 처리해주는 문자열 메소드다. 앞 뒤 둘다의 공백을 삭제한다.
*문자열 치환
- 문자열을 바꿔주는 메소드도 있다. 바꾸는 것을 치환이라고 말해서 문자열 치환이라고 한다.
static void Main(string[] args)
{
string repl1 = "Life is short you need Python";
Console.WriteLine($"{repl1.Replace("need", "love")}");
}
*대소문자 변경
- 다음은 대소문자로 바꾸는 메소드다. 영어권에서는 대소문자의 변경이 중요한일이다.
static void Main(string[] args)
{
string repl1 = "Life is short you need Python";
Console.WriteLine(repl1.ToUpper());
Console.WriteLine(repl1.ToLower());
}
*문자열 검색하기
static void Main(string[] args)
{
string search = "What you need is C Sharp";
Console.WriteLine(search.StartsWith("What"));
Console.WriteLine(search.EndsWith("is"));
Console.WriteLine(search.Contains("Sharp"));
Console.WriteLine(search.Contains("Food"));
}
문자열에 특정 단어가 있는지 검사한다. 있으면 true 없으면 false를 리턴한다.
이 포스트의 내용은 C샤프의 튜토리얼을 참고하여 작성했다. 이 외에도 수많은 방법으로 문자열을 다룰 수 있다. 하지만 이 정도의 메소드만 알아도 많은 것을 할 수 있을 것이다. 메소드들을 모두 외울 수는 없다. 자신에게 필요한 내용을 평소에 검색해 두면 좋다.
MSDN API Documentaion 은 엄청나게 방대한 양의 클래스와 메소드들이 들어있다. 살면서 모든 메소드를 다 써볼날이 있을지 모르겠지만 string 같이 주요한 클래스는 좀 더 들여다 볼 이유가 있다. 아래에 링크를 참고한다.