IsNullOrEmpty
문자열이 비어있는지 확인
string name = "";
if(string.IsNullOrEmpty(name) == true)
{
Console.WriteLine("비어있음.");
}
else
{
Console.WriteLine(name);
}
System.DateTime
시간과 관련된 기능 제공
DateTime now = DateTime.Now;
Console.WriteLine(now); //현재 날짜, 시간 출력
DateTime dayForChildren = new DateTime(now.Year, 5, 5);
Console.WriteLine(dayForChildren);
//출력 결과
2026-01-10 오후 5:14:33
2026-05-05 오전 12:00:00
System.TimeSpan
DateTime 타입에 대해 사칙 연산 중에서 유일하게 허용되는 것이 빼기 이며 빼기의 연산 결괏값은 2개의 DateTime사이의 시간 간격을 나타내는 TimeSpan으로 나온다.
DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime now = DateTime.Now;
Console.WriteLine("오늘 날짜: " + now);
TimeSpan gap = endOfYear - now;
Console.WriteLine("올해의 남은 날짜: " + gap.TotalDays);
System.Diagnostics.Stopwatch
BCL에서 제공하는 고정밀 시간 측정 클래스
※코드 특정 구간의 성능을 측정할 때 자주 사용된다.
Stopwatch sw = new Stopwatch();
sw.Start();
// 측정하고 싶은 코드
Thread.Sleep(500);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
System.String
string타입에 대한 다양한 기능을 제공
https://learn.microsoft.com/ko-kr/dotnet/api/system.string?view=net-8.0
String 클래스 (System)
텍스트를 UTF-16 코드 단위의 시퀀스로 나타냅니다.
learn.microsoft.com
아래 코드의 출력 결과는 모두 True이다.
string txt = "Hello";
Console.WriteLine(txt == "Hello");
Console.WriteLine(txt.Equals("Hello"));
== 연산은 값 형식에서는 값 자체를 비교하고, 참조 형식에서는 주소를 비교하는데
왜 txt == "Hello"가 True를 반환할까?
이유는 System.String에서 == 연산을 값을 비교할 수 있도록 오버로딩 했기 때문이다.

Format
string str = "Hello {0}: {1}";
string output = string.Format(str, "World", "Anderson");
Console.WriteLine(output);
//실행 결과
Hello World: Anderson
Format Item 구조
{index[,alignment][:formatString]}
요소의미
| index | 인자 번호 |
| alignment | 정렬 (생략 가능) |
| formatString | 출력 형식 (생략 가능) |
System.Text.StringBuilder
string 타입은 불변 객체이기 때문에 string에 대한 모든 변환은 새로운 메모리 할당을 발생시킨다.
문자열 변경에서의 문제점(StringBuilder X)
string txt = "Hello World";
for(int i=0; i<300000; i++)
{
txt = txt + "1";
}
위 코드의 동작 방식
- 힙에 Hello World 문자열 공간 할당
- 스택에 txt변수의 주소를 저장
- txt + "1" 동작을 수행하기 위해 txt.Length + "1".Length 크기의 메모리를 힙에 할당하고 txt와 "1"을 복사하여 붙힘
- 3번 과정을 통해 새롭게 할당된 힙 주소를 스택에 저장
- 3번 4번 과정을 30만번 반복
StringBuilder를 통해 문자열을 더했을때
string txt = "Hello World";
Stopwatch sw = Stopwatch.StartNew();
for(int i=0; i<300000; i++)
{
txt = txt + "1";
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
string txt2 = "Hello World";
Stopwatch sw2 = Stopwatch.StartNew();
StringBuilder sb = new StringBuilder();
sb.Append(txt2);
for (int i = 0; i < 300000; i++)
{
sb.Append("1");
}
string newText = sb.ToString();
sw2.Stop();
Console.WriteLine(sw2.ElapsedMilliseconds);
- StringBuilder가 내부적으로 일정한 양의 메모리를 항당
- Append 메서드에 들어온 인자를 미리 할당한 메모리에 복사
- 2번 과정만 30만번 반복, 만약 Append로 추가된 문자열이 미리 할당된 메모리보다 많아지면 여유분의 메모리를 할당
+로 문자열을 더했을때 걸린 시간 : 23580 ms
StringBuilder로 문자열을 더했을때 걸린 시간 : 2 ms
'C#' 카테고리의 다른 글
| [C#] LINQ(데이터 쿼리) (0) | 2026.02.19 |
|---|---|
| 스레딩 (0) | 2026.01.13 |
| [C#] 대리자(delegate) (0) | 2026.01.08 |
| [C#] Collection / Generic Collection (0) | 2026.01.04 |