열거형과 구조체

열거형이란


  • 예를들어 햄버거를 시킨다면 각 가계의 1번메뉴가 각 다르기 때문에 1번을 만들어 달라하면 다른 값이 나옵니다. 그래서 1,2,3, 이러는것보다 버거킹의 치즈버거를 만들어달라 라는식으로 만드는 것이 좋다
  • 숫자 배열 자료형에 내가 별명을 붙여서 만드는 자료형 느낌이라 보면 됩니다
  • 열거형은 클래스 외부에 선언하길 권장

열거형 선언방법

enum 이름

{

       별명들 입력 ex) Idel, Walk, Attack ...

}

 

  • 열거형의 각 요소는 첫번째부터 순서대로 0부터 시작하며 값을 수정할 수 있다
enum Color
{
	Red,Green,Yellow,Blue=100
    //blue는 100으로 설정
    // 0, 1, 2, 100 순으로 출력됨
}

열거형 형변환


  • 열거형은 정수형식간에 명시적 변환이 필요하다
enum location  //장소랑 관련된 곳을 '열거' 한다
        {
            //0부터 시작하기 때문에 =1로 선언해주면 1부터 시작할수 있음
            Village=1, HuntingPlace, Shop
        }
        
        
        
			location loc;
            loc = location.Village;
            loc = (location)1;   //형변환

            Console.WriteLine((int)loc); // 1 출력됨
            Console.WriteLine(loc);  //빌리지 출력됨

 


IsDefined


  • enum에서 isdefined 메서드는 특정 정수값 또는 문자열 이름이 해당 열거형에 정의된 유효한 멤버인지 확인하는 메서드이다
  • isdefined를 수행할 때  > (준비물: 타입,존재하는지 판단할 수)
if(Enum.IsDefined(typeof(location), 7))   //이즈디파인으로 정의 되어있는지 확인 가능
            {
                Console.WriteLine("정의가 되어있습니다");
            }
            else
            {
                Console.WriteLine("정의x");
            }

 


유연하게 Enum 사용하는 방법


  • 프로젝트나 개발을 하는 환경에서 enum에 정의된 값이 나중에 점점 늘어나는 경우가 있는데 이 경우 for문을 돌릴 때 매번 요소의 수를 수정하기엔 어려움이 있음
  • 그럴때 End라는 요소를 마지막에 넣어둠으로서 마지막 숫자를 알아서 찾아가게 할 수 있음
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Day20
{
    enum CharStates
    {
        Idle,Walk,Run,Jump,End //End를 넣음으로서 끝숫자를 알수있게됨
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            for(int i = 0; i < (int)CharStates.End; i++) //반복 몇번할지 end를 씀으로서 매번 수정 안할 수있음
            {
                var a = (char)i;
            }
        }
    }
}

구조체란


  • 구조체란 간단히 박스속에 칸막이로 다른 데이터도 넣는 개념 ex ) 박스안에 인트 플로트 더블이 같이 있음
  • 여러 자료형을 모아 하나의 자료형으로 만드는것

사용방법

struct [원하는 구조체 이름]

{

          [자료형] [변수명];

}

 

struct Car
        {
            public float maxSpeed; //맴버 변수 or 필드 라 부름
            public string maker;
            private int carNem;
        }
        
        
         Car firstCar;
         firstCar.maxSpeed = 12.14f;
         firstCar.maker = "Honda";
            // 차넘버는 프라이빗이라 수정불가능

 

 

  • 구조체는 값타입으로 분류됨 클래스와 유사하지만 클래스는 참조타입임
  • 기본적으로 널을 할당할 수 없고 상속도 불가
  • 구조체는 기본적으로 작고 데이터 중심적인 타입을 위해 설계되었으며 , 단일 값 표현, 16바이트 미만의 작은 크기, 불변성, 박싱이 자주 일어나지 않는 이 4가지가 충족되면 구조체 설계를 고려하면 된다

'C# > 프로그래밍 언어 기초 및 활용' 카테고리의 다른 글

함수  (0) 2025.10.05
배열  (0) 2025.09.23
디버거  (0) 2025.09.23
반복문  (0) 2025.09.20
조건문  (0) 2025.09.20