C#/책 정리
C# 정리 ) 구조체
denofevil
2021. 12. 10. 20:06
숫자형과 char, bool은 타입이 값 형식에 속한다.
string, object와 class로 정의되는 모든 타입은 참조 형식에 속한다.
값 형식헤도 class 처럼 사용자 정의 형식을 두는 방법이 있는데, 그것이 바로 구조체이다.
구조체는 클래스를 정의하는 문법과 유사하게 정의된다. 단지 class 예약어 대신 struct 예약어가 들어갈 뿐이다.
또한 다음 4개의 차이점을 가진다.
1 : 인스턴스 생성을 new 로 해도 되고, 안해도 된다.
2 : 기본 생성자는 명시적으로 정의할 수 없다.
3 : 매개변수를 갖는 생성자를 정의해도 기본 생성자가 C# 컴파일러에 의해 자동으로 포함된다.(클래스는 포함되지 않는다.)
4 : 매개변수를 받는 생성자의 경우, 반드시 해당 코드 내에서 구조체의 모든 필드에 값을 할당해야 한다.
구조체는 이렇게 정의해서 사용할 수 있다.
using System;
namespace Project2
{
struct Vector
{
public int X;
public int Y;
public Vector(int x, int y)
{
this.X = x;
this.Y = y;
}
public override string ToString()
{
return "X : " + X + ", Y : " + Y;
}
}
class Program
{
public static void Main(string[] args)
{
Vector v1 = new Vector();
Vector v2;
Vector v3 = new Vector(5, 10);
Console.WriteLine(v3);
}
}
}
값 형식의 변수는 new 로 생성하면 해당 변수의 모든 값을 0으로 할당하는 것과 동일한 효과를 가진다.
그리고 구조체는 사용자 정의 형식인 값 형식이다.
new 로 생성시 모든 값을 0으로 할당하는 것은 구조체에만 해당하는 것은 아니다.
기본형도 동일하게 new로 할당할 수 있다.
int n1 = new int(); // n1에는 0이 대입된다.
구조체와 클래스는 나무 유사하다 보니 그 둘의 차이를 간과하기 쉽다.
클래스는 참조형이거, 구조체는 값 형식이다.