콘텐츠로 건너뛰기
Home » 구조체(Structures)

구조체(Structures)

  • by
구조체(Structures)

구조체(Structures)

C/C++에서 등장했던 구조체가 C#에서 다시한번 등장합니다. 구조체는, 클래스와 상당히 비슷한 구조를 지니고 있습니다. 하지만 무시할 수 없는 큰 차이점이 존재하는데, 클래스는 힙에 생성되는 참조 타입(Reference Type)이고, 구조체는 스택에 생성되는 값 타입(Value Type)이라는 것이죠. 구조체는 클래스보다 메모리 소모가 덜하므로 어떤 개발자들은 구조체를 더 선호하기도 합니다. 아래는 구조체의 선언 형식입니다.

struct 구조체명
{
    // 멤버 변수.. 메소드..
}

위의 예제를 보시면, 클래스처럼 멤버 변수를 가질수도 있고, 메소드 역시 가질 수 있습니다. 한번, 구조체를 사용하여 학생의 이름과 국어, 수학, 사회, 과학, 영어 점수를 담는 구조체를 정의해보도록 하겠습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication24 {
    struct Test {
        public string name;
        public int korean;
        public int math;
        public int society;
        public int science;
        public Test(string name, int korean, int math, int society, int science) {
            this.name = name;
            this.korean = korean;
            this.math = math;
            this.society = society;
            this.science = science;
        }
        public void Show() {
            Console.WriteLine(name + "의 시험 점수:");
            Console.WriteLine("국어: " + korean + ", 수학: " + math + ", 사회:" + society + ", 과학: " + science);
        }
    }
    class Program {
        static void Main(string[] args) {
            Test student1 = new Test("김철수", 94, 96, 84, 92);
            student1.Show();
            Test student2;
            student2.name = "김영희";
            student2.korean = 100;
            student2.math = 84;
            student2.society = 96;
            student2.science = 86;
            student2.Show();
        }
    }
}
김철수의 시험 점수:
국어: 94, 수학: 96, 사회:84, 과학: 92
김영희의 시험 점수:
국어: 100, 수학: 84, 사회:96, 과학: 86
계속하려면 아무 키나 누르십시오 . . .

코드를 보시면, 9~30행에 Test라는 구조체가 정의되었습니다. name, korean, math, society, science라는 멤버 변수를 가지고, 생성자와, Show 메소드를 멤버로 가집니다. 여기서 주의하실 점은, 매개변수가 없는 생성자와 소멸자는 선언할 수 없으며, 상속을 지원하지도 않고, 디폴트 생성자 정의 역시 지원하지 않습니다. 또 하나는 구조체의 멤버를 초기화 할 수 없다는겁니다. 만약 구조체 내에서 초기화를 하고 싶으시다면 생성자를 구현하여 생성자 내에서 초기화를 하셔야 합니다.

그리고, 36~37행을 보시면 각각 new 연산자로 구조체의 객체를 생성하고, 반대로 39~45행을 보시면 new 연산자를 사용하지 않고 선언만으로도 인스턴스화 할 수 있습니다. 값 타입(Value Type)인 구조체는, 이처럼 바로 접근이 가능하고 서로 대입이 가능합니다. 이렇게 구조체는 C#에서 크기가 작거나, 내부가 그렇게 복잡하지 않을때. 즉, 작고 단순한 메서드를 포함하고 있는 선, 컬러같은 그래픽 요소 등을 구조체로 정의합니다.

댓글 남기기