Unity3d C# toolba 사용해보기

C#의 구조체(Structure) 를 알아보자


C#의 구조체를 알아보겠습니다.

이번에 알아보려고 하는것은  C#에서의 구조체입니다.  프로그래밍언어를 하면서 이것을 사용해 보셨을것 입니다. 저도 자주 사용은 하지 않지만.. 델파이에서 TreeView의 노드의 항목마다의 key값과 안 보이는 데이터들을 마땅히 담을 만한것이 없어서 한번 사용해보긴 했지만.. 잘 사용을 안 하는 것이다 보니.. 잘 안써지게되더라고요

C#에서도 당연히 Structure 라는 것이 있습니다.  클래스와 비슷하죠.. 사촌지간 즘될것입니다.    

비슷하다면… 클래스를 놔두고 이것을 사용해야 하는 이유가 있을까요? 분명.. 클래스와 다른 장점이 있기 때문에 이런 구문이 존재하겠죠..

일단 차이점을 알아보면.. 가장 큰 차이점은..    형식이 틀리다는 것입니다.   클래스는 참조 형식에 해당이 되겠고 이것은  값 형식에 해당이 됩니다.  [뇌자극]책의 초반에 읽었던 내용이 생각이 나는데요..     값 형식의경우 스택에 데이터를 보관하는 구조이며.. 구문이 끝나면 메모리에서 해제가 되기때문에 가비지컬렉터가 필요 없는 것이 특징이고..   참조 형식의 경우 힙영역에 데이터를 넣어 놓고.. 스택에 힙 영역의 번지를 가리키는 주소를 넣어 놓은 구조로.. 바로 메모리 해제가 되지 않는다고 하였거든요..

가장 큰 특징이라고 하겠네요..   한눈에 보기 편하도록 정리를 해 보겠습니다.



구조체(Structure)
클래스(class)
생성시 필요한 키워드
struct 이름 { … }
class 이름 { … }
형식
값 형식
참조형식
생성시필요한구문
선언으로 생성 가능..
new 연산자로 생성해야함
상속 여부
상속
System.Object 형식을상속하는 System.ValueType로 상속받음

이 정도로 정리가 됩니다.

구조체란? 클래스와 비슷한 구조로되어있어.. 안에 필드와 메소드가 존재하지만.... 값형식이어서 메모리관리가 효율적이며..성능이 제법좋다? 정도로 요약할 수 있겠습니다.

값 형식이다보니 메모리관리가 확실 하다보니.. 쓰임새가 있을 것 같죠..?  이것도 안에 필드와 메소드를 소유합니다 .

또한 = 연산자를 통해서 모든 필드를 그대로 복사할 수 있습니다.   클래스를  = 연산자를 이용해서 복사하면.. 참조형식이기 때문에 우리가 흔히 생각하는 복사가 아니어서 엉뚱한 결과를 얻게 되지만 구조체의 복사는 말 그대로 우리가 생각하는 그런 복사입니다.

복사가 되고 나서 값이 변경되면..  이전에 복사한 것에 영향을 안 준다는 것이죠..
또한 생성시에  선언만 한 상태로 생성해서 바로 사용할 수 있습니다. 마치 필드..(변수)를 생성해서 사용하는 것처럼요..


MyStructure a;   ← 이렇게 말이죠..

new연산자를 이용해서도 생성할 수 있습니다.
MyStructure a = new Mystructure();

이런 특징들이 있네요.. 제법 쓸모가 있을 것 같은데 예제를 한번 돌려서 감을 익혀야겠습니다.

C# Structure_Example


structure의 특징들을 한꺼번에 담기 위해서 만든 예제인 것 같은데요..  아직 C#을 잘 익히지 못해서..  모든 구조체가 System.Object형식을 상속하는 System.ValueType로 상속을 받는다고 하여..   위의 예제에는 ToString() 메소드에 오버라이딩을 하는 것을 보여줬는데요.. 잘 모르겠네요.. ㅜㅜ;;;

또한 = 연산자를 이용해서..  p3d3 = p3d2 로  복사를 하였고 복사 후  p3d2 .Z에 값을 변경하였는데   p3d3.Z에는 값의 변화가 없었네요..  하나하나 알아간다는 것은 좋은 일인데..

연습하고 테스트해보고 실제 적용해보지 않으면 금방 까먹어 버리니..ㅎㅎ 어서 책을 다 훑어보고 2~3 번정도 다시 정독해야 할 것 같네요.  그리고 바로 프로그래밍들어가야 겠습니다.








댓글