구조체 - 구조체는 데이터를 담기 위한 자료 구조이다. 클래스와 상당 부분 비슷한 데이터 형식인데, 간단한 데이터를 구조화해서 다룰 경우에는 클래스보다 구조체가 좀 더 적합하다. 또한 구조체는 클래스와 마찬가지로 메서드, 프로퍼티 등 거의 비슷한 구조를 가지고 있지만 상속은 할 수 없으며 값 형식이고 인터페이스는 구현 가능하다.
선언
클래스 VS 구조체
특징 | 클래스 | 구조체 |
키워드 | class | struct |
형식 | 참조 형식 | 값 형식 |
복사 | 얕은 복사 | 깊은 복사 |
인스턴스 생성 | new 연산자와 생성자 필요 | 선언만으로도 생성 |
생성자 | 매개 변수 없는 생성자 선언 가능 | 매개 변수 없는 생성자 선언 불가능 |
상속 | 가능 | 모든 구조체는 System.Object 형식을 상속하는 System.ValueType으로부터 직접 상속 받음 |
위 표대로, 클래스는 참조 형식이고 구조체는 값 형식이다(가장 중요한 차이!). 따라서 구조체의 인스턴스는 스택에 할당이 되고 인스턴스가 선언된 블록이 끝나는 지점의 메모리에서 사라진다. 인스턴스의 사용이 끝나면 즉시 메모리에서 제거된다는 점과 가비지 콜렉터를 덜 귀찮게 한다는 점에서 구조체는 클래스에 비해 성능의 이점 또한 가지고 있다.
구조체는 값 형식이기 때문에 할당 연산자 = 를 통해 모든 필드가 그대로 복사 된다.
예제
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
using System;
using System.Collections.Generic;
using static System.Console;
namespace MyClass
{
struct Point3D
{
public int X;
public int Y;
public int Z;
public Point3D(int X, int Y, int Z) //생성자
{
this.X = X;
this.Y = Y;
this.Z = Z;
}
{
return string.Format($"{X}, {Y}, {Z}");
}
}
class MainApp
{
static void Main(string[] args)
{
Point3D point3; // 선언만으로도 인스턴스 생성
point3.X = 10;
point3.Y = 20;
point3.Z = 40;
WriteLine(point3.ToString());
Point3D point3_2 = new Point3D(100, 200, 300); // 생성자를 이용한 인스턴스 생성도 가능
Point3D point3_3 = point3_2; // 구조체의 인스턴스를 다른 인스턴스에 할당하면 깊은 복사가 이루어짐
point3_3.Z = 400;
WriteLine(point3_2.ToString());
WriteLine(point3_3.ToString());
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
※ 혼자서 공부하며 정리하는 블로그 입니다.
참고서적 : 이것이 C# 이다.
참고사이트 : http://www.csharpstudy.com/CSharp/CSharp-struct.aspx
'Programming Language > C#' 카테고리의 다른 글
[C#] ToCharArray() (0) | 2019.05.23 |
---|---|
[C#] 인터페이스 (Interface) (0) | 2019.05.18 |
[C#] 중첩 클래스 (0) | 2019.05.18 |
[C#] 오버라이딩 (0) | 2019.05.18 |
[C#] 상속 (0) | 2019.05.18 |