C#/이것이 C#이닀

6. μƒμˆ˜μ™€ μ—΄κ±° ν˜•μ‹ (const, enum): ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ₯Ό λ§‰λŠ” μž₯치

Rainbow🌈Coder 2022. 2. 7. 14:22
728x90

λ³€μˆ˜λŠ” λ‹΄κ³  μžˆλŠ” 데이터λ₯Ό μ–Όλ§ˆλ“ μ§€ λ³€κ²½ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ 곡간이닀.

μƒμˆ˜μ™€ μ—΄κ±° ν˜•μ‹μ€ λ³€μˆ˜μ™€ 달리 μ•ˆμ— λ‹΄κΈ΄ 데이터λ₯Ό μ ˆλŒ€ λ°”κΏ€ μ—†λŠ” λ©”λͺ¨λ¦¬ 곡간이닀. 

 

ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ‘œ λ³€κ²½ν•˜μ§€ 말아야 ν•  λ³€μˆ˜λ₯Ό κ±΄λ“œλ¦¬λ©΄ μ‚¬μš©μžμ—κ²Œ 배포된 ν”„λ‘œκ·Έλž¨μ€ 버그λ₯Ό λ‚Έλ‹€.

μƒμˆ˜μ™€ μ—΄κ±° ν˜•μ‹μ„ λ³€μˆ˜ λŒ€μ‹  μ‚¬μš©ν•˜λ©΄ μ»€νŒŒμΌλŸ¬κ°€ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•  λ•Œ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ₯Ό μž‘μ•„ μ•Œλ €μ£Όκ³ ,

κ²°κ΅­μ—λŠ” ν”„λ‘œκ·Έλž¨μ˜ 버그도 쀄여쀀닀.

(μƒμˆ˜μ˜ 값을 λ°”κΎΈλ €κ³  ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό μŸμ•„λ‚Έλ‹€.)

 

μƒμˆ˜μ˜ μ„ μ–Έ

const μžλ£Œν˜• μƒμˆ˜ν˜• = κ°’;

 

<μ—΄κ±°ν˜•μ‹ - μ—¬λŸ¬ 개의 μƒμˆ˜λ₯Ό μ •λ¦¬ν•˜μž>

ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 μ’…λ₯˜λŠ” κ°™μ§€λ§Œ λ‹€λ₯Έ 값을 κ°–λŠ” μƒμˆ˜λ₯Ό μ„ μ–Έν•΄μ•Ό ν•  λ•Œκ°€ 가끔 μžˆλ‹€. 

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μƒμˆ˜λ₯Ό μ„ μ–Έν•œλŠ κ³Όμ •μ—μ„œ 또 λ‹€λ₯Έ μ‹€μˆ˜λ₯Ό μ €μ§€λ₯Ό 수 μžˆλ„ μžˆλ‹€.

수백 개의 μƒμˆ˜ μ€‘μ—μ„œ μ€‘λ³΅λ˜λŠ” 값을 κ°–λŠ” μƒμˆ˜λ“€μ΄ μ‘΄μž¬ν•œλ‹€λ©΄... λ”μ°ν•˜λ‹€.

μ—΄κ±°ν˜•μ‹μ€ μ΄λŸ¬ν•œ μ‹€μˆ˜λ₯Ό λ§‰μ•„μ£ΌλŠ” μž₯μΉ˜μ΄λ‹€.

같은 범주에 μ†ν•˜λŠ” μ—¬λŸ¬ 개의 μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ•„μ£Ό μœ μš©ν•˜λ‹€. 

μ—΄κ±° ν˜•μ‹λ„ μƒμˆ˜μ΄κΈ΄ ν•˜μ§€λ§Œ const ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹ μ— enum ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

enum μ—΄κ±°ν˜•μ‹λͺ… : κΈ°λ°˜μžλ£Œν˜• { μƒμˆ˜1, μƒμˆ˜2, μƒμˆ˜3, - - -}

 

기반 μžλ£Œν˜•μ€ μ •μˆ˜ 계열(byte, sbyte, short, ushort, int, uint, long, ulong, char )만 μ‚¬μš©ν•  수 있으며

μƒλž΅ν•  경우 μ»΄νŒŒμΌλŸ¬κ°€ intλ₯Ό κΈ°λ°˜μžλ£Œν˜•μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }

μœ„ μ„ μ–Έμ—μ„œ μ—΄κ±° ν˜•μ‹ μ•ˆμ— μ„ μ–Έλœ μƒμˆ˜λ“€μ΄ μ–΄λ–€ 값도 ν• λ‹Ήλ°›μ§€ μ•Šμ•˜μœΌλ‚˜

μœ„μ™€κ°™μ΄ μ„ μ–Έν•˜κ³  λ‚˜λ©΄

첫번째 μ—΄κ±° ν˜•μ‹ μš”μ†Œμ—λŠ” 0, κ·Έ λ‹€μŒ μš”μ†Œμ—λŠ” 1, κ·Έ λ‹€μŒ μš”μ†Œμ—λŠ” 2의 μ‹μœΌλ‘œ

1μ”© μ¦κ°€ν•œ 값을 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ ν• λ‹Ήν•œλ‹€.

 

using System;
using System.Text
using static System.Console;

namespace Hello
{
    class MainApp
    {
        enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }
        static void Main(string[] args)
        {
            WriteLine((int)DialogResult.YES); //0
            WriteLine((int)DialogResult.NO); //1
            WriteLine((int)DialogResult.CANCEL); //2
            WriteLine((int)DialogResult.CONFIRM); //3
            WriteLine((int)DialogResult.OK); //4
        }
    }
}

μœ„μ˜ 예제 ν”„λ‘œκ·Έλž¨κ³Ό 같이,

μ½”λ“œμ—μ„œλŠ” μ—΄κ±° ν˜•μ‹μ˜ 각 μš”μ†Œμ— μ–΄λ–€ 값도 μ£Όμ§€ μ•Šμ•˜μ§€λ§Œ

이듀이 μ •μˆ˜ 데이터λ₯Ό κ°–κ³  μžˆμŒμ„ μ•Œ 수 μžˆλ‹€.

DialogResult의 각 μš”μ†Œλ“€μ΄ κ°–κ³  μžˆλŠ” 값은 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ ν• λ‹Ήν•œ 것이닀.

아무것도 μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄

첫번째 μš”μ†ŒλŠ” 0, κ·Έλ‹€μŒ μš”μ†ŒλŠ” μ„ μ–Έλœ μˆœμ„œμ— 따라 1μ”© μ¦κ°€λœ 값을 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ ν• λ‹Ήν•œλ‹€. 

(μ—΄κ±° ν˜•μ‹μ˜ 각 μš”μ†ŒλŠ” μ„œλ‘œ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” 값을 κ°–κ³  μžˆλ‹€λŠ” 데 μ˜λ―Έκ°€ μžˆλ‹€.)

μ—΄κ±° ν˜•μ‹μ„ μ‚¬μš©ν•  λ•ŒλŠ” 각 μš”μ†Œμ˜ κ°’λ³΄λ‹€λŠ” 각 μš”μ†Œμ˜ 이름을 μ‚¬μš©ν•˜λŠ” 것이 κ·Έ μ˜λ―Έμ— 잘 λΆ€ν•©ν•œλ‹€κ³  ν•  수 μžˆλ‹€.

 

λ˜ν•œ 이 DialogResultλΌλŠ” μ—΄κ±° ν˜•μ‹μ€ λ³€μˆ˜κ°€ μ•„λ‹ˆκ³  μƒˆλ‘œμš΄ ν˜•μ‹μ΄λ‹€.

(c# μ»΄νŒŒμΌλŸ¬κ°€ λͺ¨λ₯΄κ³  있던 μƒˆλ‘œμš΄ ν˜•μ‹μ„ ν•˜λ‚˜ λ§Œλ“  것과 동일)

즉, intλ‚˜ float처럼 이 ν˜•μ‹μ„ μ΄μš©ν•΄ λ³€μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.(DialogResultλ§Œμ„ 담을 수 μžˆλŠ”...)

 

DialogResult result = DialogResultl.YES;

(DialogResult result = 0 보닀 μœ μ§€λ³΄μˆ˜μ„±μ΄λ‚˜ 가독성이 λ›°μ–΄λ‚˜λ‹€)

 

using System;
using System.Text;
using static System.Console;

namespace Hello
{
    class MainApp
    {
        enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }
        static void Main(string[] args)
        {
            DialogResult dialogResult = DialogResult.YES;

            WriteLine(dialogResult == DialogResult.YES); //True
            WriteLine(dialogResult == DialogResult.NO); //False
            WriteLine(dialogResult == DialogResult.CANCEL); //False
            WriteLine(dialogResult == DialogResult.CONFIRM); //False
            WriteLine(dialogResult == DialogResult.OK); //False

        }
    }
}

 

λ¬Όλ‘  μ—΄κ±° ν˜•μ‹μ˜ 각 μš”μ†ŒλŠ” 기본적으둜 μ»΄νŒŒμΌλŸ¬μ—μ„œ 값을 μžλ™μœΌλ‘œ ν• λ‹Ήλ°›μ§€λ§Œ,

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ›ν•˜λŠ” 값을 직접 λŒ€μž…ν•  μˆ˜λ„ μžˆλ‹€.

 

using System;
using System.Text;
using static System.Console;

namespace Hello
{
    class MainApp
    {
        enum DialogResult { YES, NO=50, CANCEL, CONFIRM=20, OK }
        static void Main(string[] args)
        {
            DialogResult dialogResult = DialogResult.YES;

            WriteLine((int)DialogResult.YES); //0
            WriteLine((int)DialogResult.NO); //50
            WriteLine((int)DialogResult.CANCEL); //51
            WriteLine((int)DialogResult.CONFIRM); //20
            WriteLine((int)DialogResult.OK); //21
        }
    }
}
728x90