본문 바로가기

IT/c#

[C#] 구조체와 클래스의 차이




클래스와 구조체는 데이터 타입생성기 라는 점에서는 유사하지만,



 구조체는 값타입이라는것과 클래스는 참조타입이라는 점에서 차이점이 있다.

 


 구조체를 사용하는이유는 클래스 사용시에 참조로인한 시간적 비용적 낭비를 없애기 위해 사용한다. 구조체는 값타입이기에 직접적으로 메모리에 접근하므로 낭비를 막을수 있다.



 c#에서는 크기가 작고 단순한 함수들을 포함하는 선, 컬러 들과 같은 그래픽요소등을 구조체로 정의해두었다.


 또한 구조체와 클래스의 다른점은 구조체는 상속자체가 불가능하다.


 

struct Person {

public int age;

public long height;

public float weight;

public Person(int a, long h, float w)

{

age =a;

height = h;

weight = w;

}

}

 



- new 를 이용한 구조체 생성


Person mother = new Person(40, 160L, 60F);

 



- 값타입의 메모리구조


값타입의 경우 메모리가 자동으로 생성되는 이유는 내부에서 new연사자를 자동으로 호출하기 때문이다. 알고보면 값타입도 new연사자로 메모리를 생성하지만 그 행위는 묵시적으로 일어난다.


int a; 라는 구문은 int a = new int();와 같이 해석된다.

결론적으로 값타입과 참조타입은 둘다 new연산자를 이용해서 메모리를 생성한다.

 



- 구조체사용


구조체  -  메모리 그 자체를 이용하고자 할때 주로사용

클래스  -  내부의 메모리가 어떠하든간에 기능적인 측면이 더 중요할때 사용

 



C#에서 구조체를 지원하는 이유는 c, c++호환을 위해서 사용한다.