struct 코드
struct Point
{
public int X;
public int Y;
public int Z;
public Point(int x, int y, int z)
{
this.X = x;
this.Y = y;
this.Z = z;
}
public static Point operator +(Point p1, Point p2)
{
return new Point(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z);
}
public String toString()
{
return "x: " + X + ", y: " + Y + ", z: " + Z;
}
}
class 코드
class Point
{
public int X;
public int Y;
public int Z;
public Point(int x, int y, int z)
{
this.X = x;
this.Y = y;
this.Z = z;
}
public static Point operator +(Point p1, Point p2)
{
return new Point(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z);
}
public String toString()
{
return "x: " + X + ", y: " + Y + ", z: " + Z;
}
}
큰 차이 2가지가 존재한다.
1. 구조체(struct)는 상속을 할 수 없다.
2. 클래스(class) 객체는 힙(heap)에 할당되지만 구조체(struct) 객체는 스택(stack)에 할당된다.
스택의 경우 사용할 수 있는 메모리 크기가 작고 한정적인 반면 힙은 많은 메모리크기를 가질 수 있다.
하지만 스택의 경우 가비지컬랙션에 의해 관리되지 않기 때문에 성능상 많은 장점이 있다.
static void Main(string[] args)
{
Point []p = new Point[1000];
for (int i=0; i< 1000; i++)
{
p[i] = new Point(i, i + 1, i + 2);
System.Threading.Thread.Sleep(100);
}
}
아래 구조체(struct)를 객체로 만들때에는 아래와 같이 힙 영역에 차이가 없는 것을 볼 수 있다.
아래 클래스(class)의 경우 시간이 증가함에 따라 객체의 갯수와 힙 메모리의 크기역시 증가하는 것을 볼 수 있다.
하지만 구조체로 선언을 했어도 객체를 힙영역에 메모리를 할당할 때가 있다.
1. 모든 필드의 합이 16byte를 넘는 경우이다.
2. 구조체안에 클래스 타입을 필드로 가질 경우이다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
C# 클래스 접근 제한자 (Access Modifier) (0) | 2022.07.27 |
---|---|
C# 힙 구조 (Heap) (0) | 2022.07.26 |
C# 클래스 타입 업/다운 캐스팅 (Up-DownCasting) (0) | 2022.07.22 |
C# 읽기 전용 (readonly) (0) | 2022.07.21 |
C# 클래스 상속 불가 및 함수 오버라이딩 불가 (sealed) (0) | 2022.07.21 |