[C#] 배열

김승태·2025년 3월 18일

C#

목록 보기
7/13

📦 배열 (Array)

  • 동일한 자료형의 요소들로 구성된 데이터 집합
  • 인덱스를 통하여 배열 요소에 접근 가능
  • 배열의 처음 요소의 인덱스는 0부터 시작(zero base)
  • 한 번 선언된 배열의 크기는 변경 불가
  • 배열 생성 시 힙(Heap) 메모리에 메모리가 동적 할당되고, 변수에는 배열의 참조(메모리 주소)를 저장함

🔹 배열 기본 정의

  • 배열을 만들기 위해 자료형과 크기를 정하여 생성
  • 배열의 요소에 접근하기 위해 인덱스 사용
  • 배열의 Length를 통해 크기 확인 가능

🆕 new 키워드

new 키워드란?
C#에서 메모리를 할당하고 객체(혹은 배열) 을 생성하는 연산자
아래와 같은 상황일 때 사용한다:

  • 객체 생성 시 : 클래스의 인스턴스를 생성할 때
  • 배열 생성 시 : 크기가 정해진 배열을 할당할 때
  • 기본형 값 타입 초기화 시 : 구조체와 같은 값 타입(value type)을 명시적으로 초기화할 때

new 키워드를 붙이는 이유
배열의 경우 참조 타입이므로 new 키워드를 사용하여 메모리를 할당해야 한다.
단, 배열을 선언과 동시에 값을 할당할 경우 new 키워드를 생략할 수 있다.


✅ 배열 선언 방식

// 형식 1: 크기만 선언되며, 기본값(0)으로 초기화
자료형[] 배열이름 = new 자료형[배열 크기];

// 형식 2: 직접 값 초기화
자료형[] 배열이름 = new 자료형[] { 원소1, 원소2, 원소3 };

// 형식 3: new 키워드 없이 초기화
자료형[] 배열이름 = { 원소1, 원소2, 원소3 };

🔸 예제

int[] score = new int[5];

for (int i = 0; i < 5; i++) 
{
    score[i] = (i + 1) * 10;
    Console.WriteLine(score[i]);
}

📌 자료형에 따른 기본값

int     : 0  
float   : 0.0f  
bool    : false  
char    : '\0'  
string  : null  
object  : null  

🔁 foreach 문

배열이나 컬렉션을 반복할 때 사용하는 반복문
배열의 요소를 하나씩 가져와 처리할 때 사용

foreach (자료형 내부변수 in 배열이름)
{
    // 반복 수행 내용
}

✅ 특징

  • 인덱스 없이 순차적으로 접근
  • 배열의 크기가 필요 없음
  • 역순 순회 불가
  • var 키워드 사용 시 타입을 자동 추론

🔢 n차원 배열

자료형[,] 배열이름; // ,(쉼표)의 개수 = 차원의 수
배열이름 = new 자료형[행 수, 열 수];

예시:

int[,] matrix = new int[3, 4];

🔡 char형 배열 예시

string text = "abcd";
char[] array = text.ToCharArray();

array[0] = char.ToUpper(array[0]);
text = new string(array);

Console.WriteLine(text); // 출력: Abcd

⚖️ 값 타입 & 참조 타입

✅ 값 타입

  • 공간에 대한 값을 저장
  • 스택(Stack) 메모리에 저장
  • 변수 간 복사 시 값 자체를 복사독립적인 공간
  • 예시: int, float, char, bool, struct

✅ 참조 타입

  • 공간에 대한 주소를 저장
  • 힙(Heap) 메모리에 저장
  • 변수 간 복사 시 참조 주소 복사 → 같은 공간을 가리킴
  • 예시: string, class, object, array

📥 함수에서 배열을 인자로 전달 시

static int Test1(int value)
{
    return value += 10;
}

static void Test2(int[] array)
{
    array[2] = 10;
}

static void Main(string[] args)
{
    int test = 5;
    Console.WriteLine("함수 전" + test);
    Console.WriteLine("함수 적용" + Test1(test));
    Test1(test);
    Console.WriteLine("함수 후" + test); // 값 타입 → 변화 없음

    int[] test2 = { 1, 2, 3, 4 };
    Console.WriteLine("함수 전" + test2[2]);
    Test2(test2);
    Console.WriteLine("함수 후" + test2[2]); // 참조 타입 → 값이 변경됨
}
profile
긍정머신

0개의 댓글