배열
- 배열은 동일한 데이터 형식을 갖는 데이터의 집합체를 의미합니다 배열을 사용하면 편리하게 데이터를 모아 관리,사용이 가능합니다
- 배열은 힙 메모라에 할당되며 , 참조 타입이다
- 배열은 new 키워드를 사용해 메모리를 할당하고 초기화 할 수 있고, 요소의 시작은 0부터 시작하는 인덱스로 접근 가능하다
▼ 배열 선언 방법
데이터 형식 [ ] 배열이름 = new 데이터형식 [크기] ;
string[] array = new string[4]; // 배열 선언하고 4개의 공간을 빌림
array[0] = "1번째 공간";
array[1] = "2번째 공간";
array[2] = "3번째 공간"; //배열의 인덱스는 0번부터 시작한다
반복문과 배열
- 배열의 크기를 구하는 방법
배열이름.Length
- 배열의 크기와 for문을 이용해 배열의 요소들에 접근하고, 출력할 수 있다
string[] array = new string[4]; // 배열 선언하고 4개의 공간을 빌림
array[0] = "1번째 공간";
array[1] = "2번째 공간";
array[2] = "3번째 공간";
array[3] = "4번째 공간";
for(int i=0; i<array.Length; i++)
{
Console.WriteLine($"{i+1}번째 요소는 {array[i]}입니다")
}
- foreach라는 반복문을 사용 해도 된다
- foreach는 배열이나 컬렉션과 같은 데이터 구조의 각 요소에 대해 반복적으로 코드를 실행할 때 사용되는 반복문 키워드 이다 foreach는 인덱스 범위를 벗어나는 위험 없이 배열의 값에 하나씩 접근할 수 있다
foreach (var s in array)
{
Console.WriteLine(s);
}
- foreach에서는 var을 사용해 컴퓨터가 타입을 알아서 찾게 해주는게 편리하고 좋다
다차원 배열
- 배열도 다차원으로 선언이 가능하며 선언 방법도 간단하다
- 기존 배열에서 [ ] 사이에 , 를 넣어주면 다차원을 선언할 수 있다
string[,] shortCuts2;
shortCuts2 = new string[3, 4] // 2차원의 3행 4열 배열 선언
{
{"1","2","3","4" },
{"5","6","7","8" },
{ "9","10","11","12"}
};
String
- string 은 기본적으로 char의 모음으로 이루어져 있습니다 이는 char[] 배열로 생각할 수 있습니다 하지만 char배열과 중요한 차이점이 있습니다
- string과 char[] 모두 인덱로 각 요소에 접근이 가능하지만 string은 접근한 요소를 수정할 수 없는 불변성을 가지고 있습니다
- 또 string에는 char[]배열로 변환해주는 유용한 메서드인 ToCharArray()가 있습니다
string s = "Hello";
char c = s[0]; // 'H'를 얻을 수 있습니다.
string s = "World";
char[] charArray = s.ToCharArray(); // {'W', 'o', 'r', 'l', 'd'} 배열 생성
string s = "apple";
s[0] = 'A'; // 컴파일 오류 발생 (string은 변경 불가)
char[] arr = { 'a', 'p', 'p', 'l', 'e' };
arr[0] = 'A'; // 변경 가능
// 이제 arr은 {'A', 'p', 'p', 'l', 'e'}
| 특징 | string |
char[] (char 배열)
|
| 불변성 | 불변(Immutable): 한 번 생성되면 내용(문자)을 변경할 수 없습니다. |
가변(Mutable): 배열 생성 후에도 개별 요소를 자유롭게 변경할 수 있습니다.
|
| 타입 | 클래스 (System.String) |
배열 타입 (System.Array 상속)
|
| 메모리 | 내용을 변경하면 항상 새로운 string 객체가 힙에 생성됩니다. |
요소의 값을 변경해도 같은 메모리 위치를 사용합니다.
|
- string은 char배열처럼 인덱서로 접근 가능하지만 불변성을가진 특수한 타입이라 생각하면 됩니다
Main 문
- main함수를 잘 보면, 인자값으로 문자열 배열을 받는걸 알 수 있습니다.
- c# main함수에서 문자열배열을 받는 이유는 프로그램 실행시 명령줄 인수를 전달받기 위해서 입니다
- 이 배열을 통해 프로그램이 실행될 때 명령 프롬프트나 터미널에서 프로그램 이름 뒤에 입력된 여러 개의 문자열들을 공백을 기준으로 분리하여 하나씩 전달받아 사용할 수 있게 됩니다