[C#] 구조체(struct)
구조체의 정의
구조체는 관련된 변수들을 묶는 데 사용하는 값 형식입니다.
3차원 좌표 같은 것을 저장하기 위해서는 x, y, z 좌표를 float형으로 선언해서 저장하면 될 것입니다.float x;
, float y;
, float z;
하지만, 이 변수들은 개별적으로 존재하며 단체적으로 관리하기 어렵습니다!
이것이 따로 변수 x, y, z로 돌아다니는 것보다 뭉쳐서 저장하면 관리하고 추적하기 더 편하겠죠!
그럴 때는 구조체를 많이 씁니다.
먼저 3차원 좌표를 표현하기 위한 구조체를 만들어 봅시다!
// 3차원을 표현하기 위해 만든 구조체
public struct Vector3
{
public float x;
public float y;
public float z;
}
구조체를 만들기 위해서는 struct라는 키워드를 사용합니다.
그리고 클래스처럼 생성자와 메서드도 넣을 수 있습니다.
하지만 몇 가지 주의해야 할 점이 있습니다!
1. 기본 생성자(매개 변수 없음)는 기본적으로 멤버 변수들을 초기화한다고 정의되어 있고 재정의 할 수 없습니다!
잘못된 구조체 예시
// 3차원을 표현하기 위해 만든 구조체
public struct Vector3
{
public float x;
public float y;
public float z;
// 기본 생성자 재정의 불가능이기 때문에 오류!!!!
public Vector3()
{
x = 1;
y = 1;
z = 1;
}
}
2. 매개 변수가 있는 생성자는 무조건 모든 멤버 변수들을 초기화시켜줘야 합니다.
주의 사항을 지키고 다음의 코드처럼 문법적으로 옳은 구조체를 만들어봅시다!
옳은 구조체 예시
public struct Exam
{
public string name;
public int score;
//주의// 구조체 생성자는 무조건 인자가 있어야 합니다.
public Exam(string _name,int _score)
{
this.name = _name;
this.score = _score;
}
//메서드
public void Print()
{
Console.WriteLine("이름: " + name + ", 성적: " + score);
}
}
구조체의 사용 1
위에서 보여드린 코드들을 통해 구조체를 정의하는 법에 대해 알아봤습니다.
이제 정의한 구조체를 어떻게 사용하는지 봅시다.
(위의 코드의) 구조체 Vector3와 Exam은 설계도면과 같습니다.
정수를 저장하기 위해 만든 설계도면 int, 실수를 저장하기 위해 만든 설계도면 float와 같은 것들입니다.
그렇기 때문에 우리가 정의한 Vector3와 Exam은 똑같이 int와 float를 사용하듯이 쓰면 됩니다.
int형 변수를 하나 만들기 위해서는
int a;
라고 씁니다.
그러면 Vector3형 변수를 하나 만들기 위해서는 똑같이
Vector3 myVector;
와 같이 선언하면 됩니다.
그리고 선언된 벡터의 멤버들에게 접근하고 싶으면 클래스와 동일한 방법인 .
으로 접근하면 됩니다.
구조체의 사용 예시
// 3차원을 표현하기 위해 만든 구조체
public struct Vector3
{
public float x;
public float y;
public float z;
}
// Exam 구조체
public struct Exam
{
public string name;
public int score;
//주의// 구조체 생성자는 무조건 인자가 있어야 합니다.
public Exam(string _name,int _score)
{
this.name = _name;
this.score = _score;
}
//메서드
public void Print()
{
Console.WriteLine("이름: " + name + ", 성적: " + score);
}
}
static void Main(string[] args)
{
//Vector3 사용
Vector3 vector3;
vector3.x = 1;
vector3.y = 2.5f;
vector3.z = 3;
//Exam 사용
Exam exam1;
exam1.name = "그루트";
exam1.score = 98;
exam1.Print();
}
구조체의 사용 2
구조체는 위의 Exam 구조체과 같이 생성자를 만들 수 있다고 했습니다.
구조체는 클래스처럼 초기화하기 쉽도록 생성자를 쓸 수 있습니다.
사용법도 클래스와 똑같습니다.
static void Main(string[] args)
{
//new 사용
Exam exam2 = new Exam("고주형",90);
exam2.Print();
}
여기까지 간단하게 구조체들의 사용법에 대해서 알아보았습니다.
구조체는 문법적으로 보면 클래스와 상당히 비슷하게 느껴질 수 있지만 아주 큰 차이점이 있습니다.
구조체는 값 형식(Value Type)이고 클래스는 참조 형(Reference Type)이라는 것이죠!!
다음에는 구조체와 클래스의 차이에 대해 자세하게 올리겠습니닷.
Icons made by Eucalyp from www.flaticon.com
댓글
이 글 공유하기
다른 글
-
Mac 사용자를 위한 C#으로 개발할 때 좋은 도구
Mac 사용자를 위한 C#으로 개발할 때 좋은 도구
2022.12.13 -
[C# 8.0] Nullable Reference Type이란?
[C# 8.0] Nullable Reference Type이란?
2020.02.29 -
[C#] Nullable (Value Type)
[C#] Nullable (Value Type)
2020.02.26 -
[C#] 배열 - 다차원 배열, 가변 배열
[C#] 배열 - 다차원 배열, 가변 배열
2019.07.17