C#

C# 02( 스트링, 배열)

상상모음 2025. 3. 12. 13:28

C# 배열(Array) 및 new 연산자 사용법

1. C# 배열(Array)

배열은 같은 데이터 타입의 값을 연속된 메모리 공간에 저장하는 자료구조입니다.

배열 선언 및 초기화

int[] numbers = new int[5];  // 크기가 5인 정수 배열 선언

배열을 초기값과 함께 선언할 수도 있습니다.

int[] numbers = { 1, 2, 3, 4, 5 };

또는 new 연산자를 사용하여 초기화할 수도 있습니다.

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

2. new 연산자란?

new 연산자는 객체 또는 배열을 힙 메모리에 할당하는 역할을 합니다.

객체 생성 예시

Person person = new Person();

위 코드는 Person 클래스의 새 인스턴스를 생성하는 예입니다.

배열 생성 시 new 연산자 사용

int[] arr = new int[5];  // 크기 5인 정수 배열 생성

3. 배열 요소 접근 및 수정

배열 요소는 0부터 시작하는 인덱스로 접근할 수 있습니다.

int[] numbers = { 10, 20, 30 };
Console.WriteLine(numbers[1]);  // 20

numbers[1] = 50;  // 배열 값 변경
Console.WriteLine(numbers[1]);  // 50

4. 다차원 배열

4.1 2차원 배열 (행렬)

int[,] matrix = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
Console.WriteLine(matrix[1, 2]);  // 6

4.2 가변 배열 (Jagged Array)

int[][] jagged = new int[2][];  
jagged[0] = new int[] { 1, 2 };  
jagged[1] = new int[] { 3, 4, 5 };  

Console.WriteLine(jagged[1][2]);  // 5

가변 배열은 행마다 열의 개수가 다를 수 있습니다.


5. 배열 관련 주요 속성과 메서드

 배열 길이 확인 (Length)

int[] arr = { 1, 2, 3, 4, 5 };
Console.WriteLine(arr.Length);  // 5

 Array.Sort() (정렬)

int[] arr = { 3, 1, 4, 2 };
Array.Sort(arr);
Console.WriteLine(string.Join(", ", arr));  // 1, 2, 3, 4

 Array.Reverse() (반전)

Array.Reverse(arr);
Console.WriteLine(string.Join(", ", arr));  // 4, 3, 2, 1

6. foreach문을 이용한 배열 순회

string[] names = { "Alice", "Bob", "Charlie" };
foreach (string name in names)
{
    Console.WriteLine(name);
}

7. new 연산자를 사용한 객체 배열

class Person
{
    public string Name { get; set; }
}

Person[] people = new Person[2];
people[0] = new Person { Name = "Alice" };
people[1] = new Person { Name = "Bob" };

Console.WriteLine(people[0].Name);  // Alice

8. new 연산자를 사용한 다차원 배열

int[,] matrix = new int[3, 3];  // 3x3 배열 생성
matrix[0, 0] = 1;
Console.WriteLine(matrix[0, 0]);  // 1

9. List<T> vs 배열

배열은 고정 크기, List<T>는 가변 크기입니다.

List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Add(4);  // 리스트 크기 동적 증가
Console.WriteLine(numbers.Count);  // 4

정리

✔ new 연산자는 객체 및 배열을 힙 메모리에 할당
✔ 배열은 고정 크기이며 0부터 시작하는 인덱스를 가짐
✔ new int[5]와 같이 배열 크기 지정 후 생성 가능
✔ foreach문을 이용해 배열 순회 가능
✔ Array.Sort(), Array.Reverse() 등 유용한 메서드 제공

C# string (문자열) 자료형

string은 C#에서 **문자들의 연속(문자열)**을 표현하는 참조 형(Reference Type)입니다.
System.String 클래스의 별칭이며, 불변(immutable) 특성을 가집니다.


1. 문자열 선언 및 초기화

string str1 = "Hello, World!";
string str2 = new string("Hello, C#");

string은 **불변(immutable)**이므로, 문자열을 변경할 때마다 새로운 문자열 객체가 생성됩니다.


2. 문자열 연결 (Concatenation)

+ 연산자 사용

string first = "Hello";
string second = "C#";
string result = first + ", " + second + "!";
Console.WriteLine(result);  // Hello, C#!
using System.Text;

StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(", ");
sb.Append("C#");

Console.WriteLine(sb.ToString());  // Hello, C#

StringBuilder는 문자열 변경이 빈번한 경우 성능이 좋음

 


3. 문자열 보간 (String Interpolation)

$ 기호를 사용하여 문자열을 쉽게 조합할 수 있습니다.

string name = "Alice";
int age = 25;
string message = $"My name is {name} and I am {age} years old.";
Console.WriteLine(message);  // My name is Alice and I am 25 years old.

4. 문자열 메서드 (String Methods)

 길이 확인 (Length)

string text = "C# Programming";
Console.WriteLine(text.Length);  // 14

 문자열 포함 여부 (Contains())

string sentence = "I love C#";
Console.WriteLine(sentence.Contains("C#"));  // true

 문자열 시작/끝 확인 (StartsWith(), EndsWith())

string fileName = "document.txt";
Console.WriteLine(fileName.StartsWith("doc"));  // true
Console.WriteLine(fileName.EndsWith(".txt"));   // true

 문자열 비교 (Equals(), Compare())

string a = "hello";
string b = "Hello";

Console.WriteLine(a.Equals(b, StringComparison.OrdinalIgnoreCase));  // true (대소문자 무시)
Console.WriteLine(string.Compare(a, b, true));  // 0 (같음)

 문자열 분할 (Split())

string data = "apple,banana,grape";
string[] fruits = data.Split(',');
Console.WriteLine(fruits[1]);  // "banana"

 문자열 공백 제거 (Trim(), TrimStart(), TrimEnd())

string text = "  Hello World!  ";
Console.WriteLine(text.Trim());  // "Hello World!"

문자열 대체 (Replace())

string sentence = "I love Java";
string newSentence = sentence.Replace("Java", "C#");
Console.WriteLine(newSentence);  // I love C#

5. 문자열과 문자 배열 변환

 문자열 → 문자 배열 (ToCharArray())

string str = "C#";
char[] chars = str.ToCharArray();
Console.WriteLine(chars[0]);  // 'C'

 문자 배열 → 문자열 (new string())

char[] chars = { 'H', 'e', 'l', 'l', 'o' };
string str = new string(chars);
Console.WriteLine(str);  // "Hello"

6. string과 StringBuilder 차이점

string StringBuilder

특성 불변 (immutable) 가변 (mutable)
문자열 변경 시 새로운 객체 생성 기존 객체에서 수정
성능 문자열 변경이 많으면 비효율적 성능 우수 (메모리 절약)
사용 예 문자열 변경이 적은 경우 문자열 변경이 많은 경우

7. string의 null, empty, whitespace 체크

 string.IsNullOrEmpty()

string str = "";
Console.WriteLine(string.IsNullOrEmpty(str));  // true

 string.IsNullOrWhiteSpace()

string str = "   ";
Console.WriteLine(string.IsNullOrWhiteSpace(str));  // true

8. @ 기호를 사용한 다중 줄 문자열 (Verbatim String)

string path = @"C:\Users\Documents\file.txt";
Console.WriteLine(path);  // C:\Users\Documents\file.txt

9. 문자열 포맷팅 (string.Format())

string name = "Alice";
int age = 25;
string message = string.Format("My name is {0} and I am {1} years old.", name, age);
Console.WriteLine(message);

string.Format() 대신 **문자열 보간($)**을 권장


 정리

✔ string은 불변(immutable) 객체
✔ 문자열 변경이 잦으면 StringBuilder 사용
✔ 문자열 메서드 (Length, Contains(), Substring(), Replace(), Split() 등) 활용
✔ string.IsNullOrEmpty(), string.IsNullOrWhiteSpace()로 빈 문자열 체크
✔ @를 사용해 다중 줄 문자열 처리 가능
✔ string.Format()보다 $ 문자열 보간을 권장