일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Google Excel
- PANDAS
- Python
- Java
- numpy
- Github
- SQL
- django
- array
- dataframe
- hive
- Excel
- Mac
- gas
- string
- list
- 파이썬
- math
- Google Spreadsheet
- matplotlib
- google apps script
- Redshift
- Tkinter
- c#
- Apache
- GIT
- PySpark
- PostgreSQL
- Kotlin
- Today
- Total
달나라 노트
C# : 생성자(Constructor) 본문
Class의 생성자(Constructor)라는 것을 알아봅시다.
using System;
public class my_test
{
public string color;
public string size;
public my_test(string c, string s)
{
color = c;
size = s;
}
}
class MyProgram
{
static void Main()
{
my_test test_obj = new my_test();
string color_info = test_obj.color;
string size_info = test_obj.size;
Console.WriteLine(color_info);
Console.WriteLine(size_info);
}
}
위 코드를 실행하면 에러가 발생합니다.
my_test test_obj = new my_test();
이유는 이 부분 때문입니다.
정확한건 이후에 살펴보고 아래 코드를 봅시다.
아래 코드는 에러가 발생하지 않게 수정한 코드입니다.
using System;
public class my_test
{
public string color;
public string size;
public my_test(string c, string s)
{
color = c;
size = s;
}
}
class MyProgram
{
static void Main()
{
my_test test_obj = new my_test("White", "L");
string color_info = test_obj.color;
string size_info = test_obj.size;
Console.WriteLine(color_info);
Console.WriteLine(size_info);
}
}
-- Result
White
L
my_test test_obj = new my_test("White", "L");
수정한 부분은 이 부분이며 my_test class를 호출할 때 괄호 안에 White, L이라는 인자를 주었습니다.
무슨 일일까요?
...
public class my_test
{
public string color;
public string size;
public my_test(string c, string s)
{
color = c;
size = s;
}
}
...
my_test class 선언 부분을 봅시다.
위와 같은데 뭔가 특이한 부분이 있습니다.
my_test class가 선언되었는데 그 안에 my_test라는 method가 선언되고 있습니다.
이렇게 class안에 class명과 동일한 method를 만들면 이것은 보통 생성자(constructor)가 됩니다.
이 생성자는 무엇을 위한걸까요?
my_test에 존재하는 필드는 color, size 두 가지가 있습니다.
둘 다 public 변수로 string 타입으로 선언되고 있습니다.
근데 문제는 color, size라는 변수가 선언되기만했지 어떤 값이 할당되지 않았습니다.
그러면 my_test class를 어딘가에서 호출해서 객체를 만들었을 때 color, size 필드를 출력하면 어떻게될까요?
color, size에는 아무 값이 할당되어있지 않으니 error가 발생합니다.
이것이 바로 맨 처음에 봤던 예시의 코드에서 에러가 발생했던 이유입니다.
따라서 위처럼 아무 값도 할당되지 않은(= 초기화되지 않은) 필드를 가진 class는 호출될 때 초기화되지 않은 변수에 모두 어떠한 값을 할당해서 초기화해줘야합니다.
근데 코드를 적다보면 이것을 까먹을수도 있겠죠.
이를 방지해주는게 바로 생성자입니다.
생성자(Constructor)는 class이름과 동일하게 선언된 class 내부에 있는 method이며 보통 class가 호출되어 객체를 만들 때 실행됩니다.
...
public class my_test
{
public string color;
public string size;
public my_test(string c, string s)
{
color = c;
size = s;
}
}
...
public my_test(string c, string s)
위 코드의 생성자 부분을 보면 2개의 인자를 받고 각각의 인자를 color, size 변수에 할당하고 있습니다.
즉, 아무런 값도 할당되지 않았던 color, size 변수에 값을 할당해주는 역할을 하는겁니다.
class에 존재하는 field가 아무런 값도 할당되지 않은 채로 유지되지 않도록 하기위해서 말이죠.
...
public class my_test
{
public string color;
public string size;
public my_test(string c, string s)
{
color = c;
size = s;
}
}
...
생성자(Constructor)를 만들 때에는 아주 중요한 규칙이 있습니다. 그 내용은 다음과 같습니다.
1. 생성자 method의 이름은 class의 이름과 반드시 동일해야 한다.
2. 생성자 method는 void, int, string 등 어떠한 return 타입도 명시되지 않아야 한다. (위 예시에서 public my_test 생성자 생성 부분에서 void, int, string 등 return data type을 알려주는 어떠한 키워드도 존재하지 않는걸 볼 수 있습니다.)
3. 생성자는 class가 호출되어 어떠한 객체를 생성할 때 반드시 한번 실행된다.
4. 생성자는 return 키워드를 사용할 수 없습니다. (생성자에서는 return 키워드를 이용해 어떠한 값을 return할 수 없습니다.)
'C# > C#' 카테고리의 다른 글
C# : 상속 (Inheritance, sealed)과 다형성(Polymorphism) (0) | 2022.03.23 |
---|---|
C# : field와 property (get, set, Access Modifier) (0) | 2022.03.23 |
C# : class와 object (class, 객체, Access Modifier) (0) | 2022.03.23 |
C# : method (0) | 2022.03.23 |
C# : Array Max, Min, Sum, Average (Array의 최대값, 최소값, 합, 평균 얻기) (0) | 2022.03.23 |