C#의 기초 - 8 (enum, struct)

krokrai·2025년 12월 16일

열거형(enum), 구조체(struct)

개요

  • 열거형이란
  • 구조체란

열거형이란

  • 열거형(enum)은 정수에게 별명을 붙혀 주는 것입니다.
  • 쉽게 말하여, 친구 A는 이름친구들 끼리 불리우는 별명이 있듯, 열거형을 이용해 내 코드 내에서 정수를 부를 별명을 지정하겠다. 라는 것입니다.

enum Food
{
	Hamburger, Pizza, Chicken
}

void main()
{
	Console.WriteLine(Food.Hamburger);
    Console.WriteLine((int)Food.Hamburger);
    Console.WriteLine(Food.Pizza);
    Console.WriteLine((int)Food.Pizza);
    Console.WriteLine(Food.Chicken);
    Console.WriteLine((int)Food.Chicken);
}
Hamburger
0
Pizza
1
Chicken
2
  • 위와 같이 출력은 Hamburger나 Pizza로 되지만, 형변환을 통해 실체를 보면 0부터 시작하여, 1씩 증가하는 정수가 나오는 것을 알 수 있다.
  • 그렇다면 저 숫자를 바꿀 수 있을까?, 어디에 사용될까?

enum Food
{
	//
	Hamburger=4, Pizza=-3, Chicken = 9999
}

void main()
{
	Console.WriteLine("치킨 주문이요!");
    INeedFood(Food.Chicken)
}

void INeedFood(Food fd)
{
	switch(fd)
    {
    	case Food.Hamburger:
        Console.WriteLine($"여기 음식번호 {(int)fd}번 햄버거 나왔습니다."););
        break;
        case Food.Pizza:
        Console.WriteLine($"여기 음식번호 {(int)fd}번 피자 나왔습니다."););
        break;
        case Food.Chicken:
        Console.WriteLine($"여기 음식번호 {(int)fd}번 치킨 나왔습니다.");
        break;
    }
}
치킨 주문이요!
여기 음식번호 9999번 치킨 나왔습니다.
  • 위와 같이 switch문 등을 사용할때 가독성이 올라가, 후에 코드가 길어지게 되었을 때 해당 코드의 쓰임세를 바로 알 수 있게 됩니다.

구조체란

  • 구조체(struct)란 프로그래머가 직접 정의할 수 있는 자료형을 말합니다.
  • 예를 들어 학원에서 사람들을 받을 때 자료를 저장하는 것을 일일이 손으로 직접 기입하는 것은 힘들기 때문에 이 때 사용 가능한게 구조체입니다.

void Main()
{
	Academy[] academy = new Academy[3];
	academy[0] = new aaa("홍길동",30,1);
	academy[1] = new aaa("둘리", 5, 4);
	academy[2] = new aaa("또치", 6, 3);

	for (int i = 0; i < a.Length; i++)
	{
    	academy[i].PrintInfo();
	}
	
    // academy[1].name = "호잇"을 적을 경우 오류가 나는 이유는 후술 하겠습니다.
	// academy[1].age = 11; 이와 같이 적을 경우 private로 지정된 변수에 접근한다고 오류는 냅니다.
	academy[1].sClass = 3;
	academy[1].PrintInfo();
}

struct Academy
{
	string name;
    private int age;
    public int class;
    
    // 아래는 생성자로 생성되었을때 초기화를 목적으로 사용할 수 있습니다.
    // public은 외부(Main() 같은데)에서 직접 접근할 수 있으며, private는 외부에서는 접근 하지 못하지만, 내부에서는 접근할 수 있게 해주는 한정자입니다.
    Academy(string _name, int _age, int _class)
    {
    	name = _name;
        age = _age;
        class = _class
    }
    
    public void PrintInfo()
	{
	    Console.WriteLine($"-----\n이름 : {name}\n나이 : {age}\n학급 : {sClass}");
	}
}
-----
이름 : 홍길동
나이 : 30
학급 : 1
-----
이름 : 둘리
나이 : 5
학급 : 4
-----
이름 : 또치
나이 : 6
학급 : 3
-----
이름 : 둘리
나이 : 5
학급 : 3
  • privatepublic은 접근 한정자로, 외부에서 접근하는 것을 제한할 수 있습니다.

    protectinternal도 있습니다.

  • 구조체 내부의 모든 선언(함수, 변수)은 private로 지정되어 있기 때문에, 외부와 상호작용이 필요한 함수의 경우에는 반드시 public을 붙여야합니다.
profile
게임을 좋아하고 만들고 싶은 개발자 지망생입니다.

0개의 댓글