C# 02( 스트링, 배열)
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()보다 $ 문자열 보간을 권장