본문 바로가기
C#/Basic Syntax

[C#] 10. 구조체 사용하기

by 가든가든 2022. 10. 22.
728x90

구조체란?

구조체는 이름 하나로 데이터를 묶어 관리하는 역할을 합니다. 변수는 이름 하나로 공간을 하나 갖고, 배열은 이름 하나로 형식이 동일한 공간을 여러 개 갖습니다. 변수와 배열을 확장하여 이름 하나로 데이터 형식을 1개 또는 여러 개 보관하는 그릇 역할을 하는 것이 바로 구조체입니다.

**구조체**
- 구조체를 정의하려면 struct 문을 사용한다.
- C# 구조체에 메소드, 필드, 속성등을 가질 수 있다.
- C# 구조체에 기본(Default) 생성자를 정의할 수 없다.
- C# 구조체에 소멸자를 정의할 수 없다.
- 클래스는 힙에 생성되는 참조 유형이고 구조체는 스택에 생성되는 값 유형이다.
- 구조체는 상속을 지원하지 않는다.
- 클래스와 달리 구조체는 new 연산자를 사용하지 않고 인스턴스화할 수 있다.

구조체를 사용하여 하나 이상의 변수 또는 배열을 묶어 관리하기

using System;

namespace N_StructDemo
{
    struct Point
    {
        public double X;
        public double Y;
    }

    public class StructDemo
    {
        public static void StructDemoEx()
        {
            Point point;
            point.X = 3.5;
            point.Y = 2.5;
            Console.WriteLine($"X : {point.X}, Y : {point.Y}");
        }
    }
}
using System;
using N_StructDemo;

namespace Day8_Main
{
    class Day8_Main
    {
        static void Main()
        {
            StructDemo.StructDemoEx(); //정적 메서드 호출
        }
    }
}
💡 Result
X : 3.5, Y : 2.5

구조체 배열을 사용해서 데이터 대입 및 출력하기

using System;

namespace N_StructArray
{
    struct BusinessCard
    {
        public string Name;
        public int age;
    }

    public class StructArray
    {
        public static void Print(string name, int age)
            => Console.WriteLine($"{name}은(는) {age}살 입니다.");

        public static void StructArrayEx()
        {
            BusinessCard biz;
            biz.Name = "가든";
            biz.age = 27;

            Print(biz.Name, biz.age);

            BusinessCard[] names = new BusinessCard[2]; // 구주체 형식 배열 선언
            names[0].Name = "이정원"; names[0].age = 25;
            names[1].Name = "GardenLee"; names[1].age = 55;
            for(int i = 0; i < names.Length; i++)
            {
                Print(names[i].Name, names[i].age);
            }
        }
    }
}
using System;
using N_StructDemo;
using N_StructArray;

namespace Day8_Main
{
    class Day8_Main
    {
        static void Main()
        {
            //StructDemo.StructDemoEx();
            StructArray.StructArrayEx();
        }
    }
}

구조체 매개변수 : 함수의 매개변수에 구조체 사용하기

using System;

namespace N_StructParameter
{
    struct Member //Member 구조체 선언
    {
        public string Name;
        public int Age;
    }

    internal class StructParameter
    {
        public static void StructParameterEx()
        {
            string name = "이정원";
            int age = 27;
            Print(name, age);

            Member m;
            m.Name = "가든";
            m.Age = 25;
            Print(m);
        }

        static void Print(string name, int age)
            => Console.WriteLine($"이름은 {name}이며, 나이는 {age}입니다.");
        static void Print(Member member)
            => Console.WriteLine($"이름은 {member.Name}이며, 나이는 {member.Age}입니다.");
    }
}
using System;
using N_StructDemo;
using N_StructArray;
using N_StructParameter;

namespace Day8_Main
{
    class Day8_Main
    {
        static void Main()
        {
            //StructDemo.StructDemoEx();
            //StructArray.StructArrayEx();
            StructParameter.StructParameterEx();
        }
    }
}
💡 Result
이름은 이정원이며, 나이는 27입니다.
이름은 가든이며, 나이는 25입니다.
728x90

'C# > Basic Syntax' 카테고리의 다른 글

[C#] 12. 클래스 (Class)  (0) 2022.10.24
[C#] 11. 열거형 형식 (Enumeration; enum)  (0) 2022.10.24
[C#] 09. 닷넷 API 사용하기  (0) 2022.10.22
[C#] 8. 함수  (0) 2022.09.29
[C#] 7. 배열  (1) 2022.09.22