일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 구조체
- docker
- vim
- 유니티
- dart 언어
- C# delegate
- C++
- 포인터
- github
- c#
- c언어
- Houdini
- C언어 포인터
- HTML
- jupyter
- Flutter
- c# 추상 클래스
- Python
- jupyter lab
- gitlab
- Algorithm
- 도커
- c# winform
- 플러터
- 깃
- 다트 언어
- c# 윈폼
- Data Structure
- Unity
- git
Archives
- Today
- Total
nomad-programmer
[Programming/C#] new 연산자 본문
객체를 생성할 때 다음과 같이 코드를 작성한다.
Cat kitty = new Cat();
위 문장의 가장 끝에 있는 Cat()는 생성자(Constructor) 라고 하는 특별한 메소드이다. 생성자는 클래스의 이름과 동일한 이름을 가지며, 객체를 생성하는 역할을 한다.
Cat() 생성자 앞에 있는 new 키워드는 생성자를 호출해서 객체를 생성하는 데 사용하는 연산자이다. 말하자면 new 연산자와 생성자는 바늘과 실 같은 존재라고 할 수 있다.
heap 메모리 공간에 객체를 생성한다. 그러니 당연하게도 할당시키는 연산자 new를 써야 한다.
C++ 언어에서 new, C언어에서 malloc과 같다고 생각하면 된다.
Cat 클래스를 비롯한 모든 클래스는 복합 데이터 형식이다. 그리고 복합 데이터 형식은 참조 형식이다. 다음 문장과 같은 선언문에서 kitty는 null을 가진다. kitty 자체에 메모리가 할당되는 것이 아니고 kitty는 참조로써 객체가 있는 곳을 가리킬 뿐이다.
Cat kitty;
그래서 new 연산자와 생성자가 필요한 것이다. new 연산자와 생성자를 이용해서 heap 메모리에 객체를 생성하고, kitty 변수는 생성자가 heap 메모리에 생성한 객체를 가리키는 것이다.
using System;
namespace CSharpExample
{
class Cat
{
public string Name;
public string Color;
public void Meow()
{
Console.WriteLine($"{Name}: 야옹~");
}
}
class MainApp
{
static int Main(string[] args)
{
Cat kitty = new Cat
{
Color = "하얀색",
Name = "키티"
};
kitty.Meow();
Console.WriteLine($"{kitty.Name}: {kitty.Color}");
Cat nero = new Cat
{
Color = "검은색",
Name = "네로"
};
nero.Meow();
Console.WriteLine($"{nero.Name}: {nero.Color}");
return 0;
}
}
}
/* 결과
키티: 야옹~
키티: 하얀색
네로: 야옹~
네로: 검은색
*/
new 연산자와 생성자는 모든 데이터 형식에 사용할 수 있다.
C#에서는 모든 형식이 클래스이기 때문에 int나 float, string 같은 데이터 형식도 생성자를 갖고 있다. 따라서 다음과 같은 변수 선언도 가능하다.
int a = new int();
a = 3;
string b = new string( new char []{'한', '글'} );
'Programming > C#' 카테고리의 다른 글
[Programming/C#] 객체 복사: 얕은 복사와 깊은 복사 (2) | 2020.09.08 |
---|---|
[Programming/C#] 생성자와 소멸자 (0) | 2020.09.08 |
[Programming/C#] 로컬 함수 (0) | 2020.09.07 |
[Programming/C#] 선택적 매개 변수 (0) | 2020.09.07 |
[Programming/C#] 네임드 매개 변수 (0) | 2020.09.07 |
Comments