C#/C# 교과서

[C# 교과서] 22~23. 구조체 사용하기, 열거형 형식 사용하기

서니션 2022. 12. 29. 15:15
728x90
반응형

구조체

는 이름 하나로 데이터를 묶어 관리하는 역할

변수와 배열을 확장하여 이름 하나로 데이터 형식을 1개 또는 여러 개 보관하는 그릇 역할을 하는 것이 바로 구조체

 

struct 구조체이름

{

데이터형식변수1;

데이터형식변수2;

데이터형식변수3;

}

using System;

struct Point
{
    public int X;
    public int y;
}

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Point point; // Point 구조체 형식의 변수 선언
            point.X = 100;
            point.y = 200;
            Console.WriteLine($"X: {point.X}, Y: {point.y}");            
        }
    }
}

구조체변수이름.멤버이름=값;

점(.)으로 구분하여 각 멤버를 호출해서 사용

using System;

struct Product
{
    public int Id;
    public string Title;
    public decimal Price;
}

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Product product;

            product.Id=1;
            product.Title="좋은 책";
            product.Price=10000M;

            // 구조체 형식 변수 사용
            string message =
            $"번호 : {product.Id}\\n상품명 : {product.Title}\\n가격 : {product.Price}";
            Console.WriteLine(message);
        }
    }
}

구조체 배열

명함구조체[] 명함배열 - new명함구조체[1000];

using System;

struct Card
{
    public string Name;
    public int Age;
}

namespace codingstudy
{
    class Program2
    {
        static void Print(string name, int age)
        => Console.WriteLine($"{name}은 {age}살");
        static void Main()
        {
            Card biz;
            biz.Name = "이재현";
            biz.Age = 26;
            Print(biz.Name, biz.Age);

            Card[] names = new Card[2];
            names[0].Name = "이주연"; names[0].Age=25;
            names[1].Name = "김영훈"; names[1].Age=26;

            for (int i = 0; i < names.Length; i++)
            {
                Print(names[i].Name, names[i].Age);
            }
        }
    }
}

C#에서 구조체 사용은 클래스 사용에 비해서 빈도가 극히 적은 편

간단한 구조의 데이터를 모아 처리할 때는 클래스보다 처리 속도가 좋기에 적절하게 사용함


구조체 매개변수

한 번에 함수가 전달해야 하는 매개변수가 많다면, 이처럼 구조체로 묶어 구조체 변수 하나로 사용하면 복잡하지 않고 편리하게 매개변수 전달 가능

using System;

struct Member
{
    public string Name;
    public int Age;
}

namespace codingstudy
{
    class Program2
    {
        static void Print(string name, int age)
        => Console.WriteLine($"{name}은 {age}살");

        static void Print(Member member)
        => Console.WriteLine($"{member.Name}은 {member.Age}살");

        static void Main()
        {
            string name = "이재현";
            int age = 26;
            Print(name, age); // 매개변수를 따로 선언

            Member m; // 구조체 사용
            m.Name = "이주연";
            m.Age = 100;
            Print(m); // 구조체 매개변수를 사용하여 전달
        }
    }
}

내장형 구조체

DateTime 구조체 : 시간/날짜 관련 모든 정보 제공

DateTime 구조체의 Now 속성은 현재 사용 중인 컴퓨터의 시간과 관련한 모든 정보를 알려줌

TimeSpan 구조체 : 시간/날짜 간격에 대한 모든 정보를 제공

using System;
namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            TimeSpan dday = Convert.ToDateTime("2022-12-31")-DateTime.Now;
            Console.WriteLine(
                $"{DateTime.Now.Year}년도의 마지막날은 {(int)dday.TotalDays}일 남음"
            );
            // 지난 시간 구하기
            TimeSpan times = DateTime.Now - Convert.ToDateTime("1999-01-23");
            Console.WriteLine($"내가 지금까지 며칠 살아왔는지? {(int)times.TotalDays}");
        }
    }
}

 

Char 구조체 : 문자 관련 모든 정보 제공. 특정 문자가 숫자인지 기호인지 공백인지 판단하는 기능 제공

Guid 구조체 : 절대로 중복되지 않는 유일한 문자열 생성


열거형 enum

기억하기 어려운 상수들을 기억하기 쉬운 이름 하나로 묶어 관리하는 표현 방식

enum 열거형이름

{

열거형변수1,

열거형변수2,

열거형변수3

}

using System;

enum Priority
{
    High,
    Normal,
    Low
}
namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Priority high = Priority.High; 
            Priority normal = Priority.Normal;
            Priority low = Priority.Low;

            Console.WriteLine($"{high}, {normal}, {low}");
        }
    }
}

열거형은 특정 클래스 내 선언해서 사용 가능

비주얼 스튜디오에서는 열거형 값을 switch 문에 대입하면 자동으로 열거형 항목에 해당하는 case 문을 만드는 기능을 제공하기에 편리하게 입력이 가능


열거형 관련 클래스

Enum 클래스의 GetNames() 메서드를 사용하면 지정된 열거형에서 상수 이름의 배열을 검색함


문자열을 특정 열거형으로 반환

Enum.Parse() 메서드로 문자열을 사용하여 실제 열거형을 만들 수 있음

하나 이상 열거된 사수 이름이나 숫자 값의 문자열 표현을 해당하는 열거형 개체로 변환

728x90
반응형