C# 에서 new() 를 사용하는 이유는 단순해 보입니다.
어떤 객체든 new 를 붙이면 메모리에 생겨나고, 바로 사용할 수 있게 됩니다.
하지만 이 new() 라는 한 줄의 코드 속엔 두 가지 서로 다른 동작이 숨어 있습니다.
첫째는 메모리 공간 확보, 둘째는 초기화(생성자 호출) 입니다.
이 둘은 항상 함께 다니기에 한 덩어리처럼 보이지만, 의미적으로는 전혀 다른 역할을 하고 있습니다.
new 는 공간만 만든다
new 는 단지 메모리를 확보하는 명령어입니다.
구조체라면 메모리가 스택에 할당되고, 클래스라면 메모리가 힙에 할당됩니다.
즉, new 자체는 그저 “쓸 공간을 마련하라”는 의미일 뿐, 그 공간을 어떤 값으로 채우는지는 new 의 역할이 아닙니다.
초기화는 괄호 () 가 한다
우리가 함수를 호출할 때 이름 뒤에 괄호를 붙이는 것처럼 new 뒤에 붙은 () 는 생성자 함수를 호출하는 기능을 합니다. 그리고 생성자는 내부적으로 모든 field 값을 기본값으로 초기화합니다.
여기서 기본값이란 숫자는 0, bool type 은 false, 그리고 참조형일 경우는 null 로 채워집니다.
C# 에서는 초기화 되지 않은 변수를 사용하면 컴파일 에러가 납니다.
따라서 구조체도 new () 로 초기화하는 것이 어찌보면 더 안전합니다.
struct MyStruct
{
public int number;
public string text;
}
MyStruct a;
// 오류: 사용 전 초기화되지 않음
Console.WriteLine(a.number);
// 생성자 호출로 모든 필드 자동 초기화
MyStruct b = new MyStruct();
Console.WriteLine(b.number); // 0
Console.WriteLine(b.text); // null
구조체와 클래스 : 메모리 영역은 다르지만 논리는 동일
• new MyStruct() : 스택에 공간 확보 + 생성자 호출로 초기화
• new MyClass() : 힙에 공간 확보 + 생성자 호출로 초기화
new 는 공간을 만들고, 괄호 () 는 생성자를 호출해 초기화합니다.
위에서 언급한 것처럼, C# 은 초기화되지 않은 변수의 사용을 금지하기 때문에, new() 로 생성하면 그 즉시 사용할 수 있는 “초기화된 상태” 가 됩니다.
마무리
new () 는 메모리 확보와 생성자 호출(초기화) 을 동시에 수행합니다.
그리고 구조체든 클래스든, 기본 생성자는 모든 필드를 0, false, null 로 자동 초기화합니다.
• 클래스는 반드시 new() 로 인스턴스를 생성해야 사용할 수 있습니다.
• 구조체는 new 없이도 선언 가능하지만, 이 때는 모든 필드를 직접 초기화해야 사용이 가능합니다.
'C#' 카테고리의 다른 글
구조체를 초기화하는 몇 가지 방법들 (0) | 2025.06.03 |
---|---|
접근 제한자가 없는 struct, class 는 public 일까? private 일까? (0) | 2025.05.31 |
정렬 알고리즘의 기초 2편 : 선택 정렬 (Selection Sort) (0) | 2025.05.04 |
정렬 알고리즘의 기초 1편 : 버블 정렬 (Bubble Sort) (0) | 2025.05.04 |
C# 에서 temp 없이 값 교환하는 법, 이렇게 간단해도 될까요? (0) | 2025.05.04 |