Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 'new' 키워드의 용도란? 배열·객체 인스턴스 생성 완벽 가이드

C#에서 new 키워드는 객체 지향 프로그래밍의 핵심 요소로, 주로 두 가지 용도로 사용됩니다. 첫 번째는 배열이나 객체를 메모리에 생성(인스턴스화)하는 것이며, 두 번째는 기본 클래스의 멤버를 숨기는(method hiding) 역할입니다. 이 글에서는 가장 많이 쓰이는 인스턴스 생성 용도를 중심으로 살펴보겠습니다.

1. 배열 인스턴스 생성

new 키워드를 사용하면 배열의 인스턴스를 생성하고 초기화할 수 있습니다. 다음 예제는 정수형 요소 5개를 담을 수 있는 배열을 힙(heap) 메모리에 할당합니다.

int[] a = new int[5];

이렇게 생성된 배열의 각 요소는 자동으로 기본값(정수형의 경우 0)으로 초기화됩니다.

2. 객체 생성 및 인스턴스화

new 연산자는 클래스의 객체를 생성하거나 인스턴스화하는 데 사용됩니다. new 키워드가 실행되면 해당 타입에 맞는 메모리가 힙에 할당되고, 생성자가 호출된 후 객체의 참조가 반환됩니다. 아래 예제에서는 new를 사용해 NumberManipulator 클래스의 객체를 생성합니다.

예제 코드

using System;

namespace CalculatorApplication {
   class NumberManipulator {
      public void swap(int x, int y) {
         int temp;

         temp = x; /* x의 값을 임시 변수에 저장 */
         x = y;    /* x에 y의 값 대입 */
         y = temp; /* y에 임시 변수의 값 대입 */
      }
      static void Main(string[] args) {
         NumberManipulator n = new NumberManipulator();

         /* 지역 변수 정의 */
         int a = 100;
         int b = 200;
         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);
         /* 값을 교환하는 함수 호출 */
         n.swap(a, b);
         Console.WriteLine("After swap, value of a : {0}", a);
         Console.WriteLine("After swap, value of b : {0}", b);
         Console.ReadLine();
      }
   }
}

실행 결과

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 100
After swap, value of b : 200

참고: 값이 교환되지 않는 이유

흥미롭게도 위 실행 결과에서 swap 호출 후에도 a와 b의 값은 그대로입니다. 그 이유는 C#에서 메서드 매개변수가 기본적으로 값에 의한 전달(pass by value) 방식으로 복사되기 때문입니다. 원본 변수의 값을 실제로 변경하려면 ref 또는 out 키워드를 사용해 참조로 전달해야 합니다.

정리

위 예제의 new NumberManipulator() 구문은 NumberManipulator 클래스의 새 인스턴스를 생성하여 변수 n에 할당합니다. 이처럼 new 키워드는 C#에서 객체와 배열을 메모리에 생성하는 필수적인 역할을 하며, 모든 참조 형식(reference type)을 사용할 때 반드시 거치게 되는 기본 문법입니다.