포슀트

🌚 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ - Ordinal Data Type

πŸ’« μ‚¬μš©μž μ •μ˜ μˆœμ„œ νƒ€μž…


πŸ’« μˆœμ„œ νƒ€μž… - Ordinal type


  • κ°€λŠ₯ν•œ κ°’λ“€μ˜ λ²”μœ„κ°€ μ–‘μ˜ μ •μˆ˜ 집합과 μ—°κ³„λ˜λŠ” νƒ€μž…
  • κΈ°λ³Έ μˆœμ„œ νƒ€μž… - Java의 integer, char ν˜Ήμ€ C의 int, short, char

  • μ‚¬μš©μž-μ •μ˜ μˆœμ„œ νƒ€μž…
    • μ—΄κ±°
    • λΆ€λΆ„ λ²”μœ„

β†’ μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ 간결해지고 가독성이 쒋아진닀.

πŸ’« μ—΄κ±° νƒ€μž… - Enumeration Type


  • μ—΄κ±° μƒμˆ˜(enumeration constants)λ“€μ˜ λͺ¨μž„을 μ •μ˜ν•˜κ³  κ·Έλ£Ήν•‘ν•œ νƒ€μž…
    • C#, Enum
  • μ—΄κ±° μƒμˆ˜μ—λŠ” μ „ν˜•μ μœΌλ‘œ μ •μˆ˜ κ°’ 0, 1, … 등이 μ•”λ¬΅μ μœΌλ‘œ ν• λ‹Ήλ˜λ‚˜ μž„μ˜μ˜ 값을 λͺ…μ‹œμ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” 것도 κ°€λŠ₯

🫧 섀계 고렀사항

μ—΄κ±°ν˜•μ΄ μ •μˆ˜ν˜•μœΌλ‘œ κ°•μ œ ν˜•λ³€ν™˜ κ°€λŠ₯ν•œκ°€?
μ—΄κ±°ν˜•κ³Ό μ •μˆ˜μ΄μ™Έμ˜ νƒ€μž…κ³Όμ˜ 관계λ₯Ό ν—ˆμš©ν•  것인가?

  • μ—΄κ±° νƒ€μž…μ΄ μ œκ³΅λ˜μ§€ μ•ŠλŠ” μ–Έμ–΄μ—μ„œλŠ” μ •μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ μ—΄κ±°ν˜•μ„ 흉내냄
1
2
3
4
5
6
7
#define MALE 0
#define FEMALE 1
// or
int const MALE = 0;
int const FEMALE = 1;

if (gender == MALE) // ~
  • μ—΄κ±° νƒ€μž…μ„ μ΄μš©ν•˜λ©΄ μƒˆλ‘œμš΄ νƒ€μž…μ„ μ •μ˜ν•˜κ²Œ 되고 가독성을 ν–₯μƒμ‹œν‚¨λ‹€.
1
2
3
4
5
6
7
enum Gender
{
    MALE = 0,
    FEMALE = 1
};

if (gender == MALE) // ~

@ C, Pascal은 μ—΄κ±°ν˜•μ„ 처음으둜 λ„μž…ν•˜μ—¬ 널리 쓰인 μ–Έμ–΄
@ CλŠ” μ—΄κ±° νƒ€μž… enum을 κΈ°λ³Έ νƒ€μž…μœΌλ‘œ 제곡

  • μ—΄κ±° νƒ€μž…μ„ μ œκ³΅ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ μ–Έμ–΄μ—μ„œ μ •μˆ˜ νƒ€μž…κ³Όμ˜ ν˜•λ³€ν™˜μ€ ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
    • μ—΄κ±° νƒ€μž…μ€ μ—΄κ±° νƒ€μž…μ΄μ§€ μ •μˆ˜ν˜•μ€ μ•„λ‹˜, 단 μ—΄κ±°ν˜•μ˜ 값을 μ •μˆ˜ν˜•μœΌλ‘œ μ°Έμ‘°λŠ” κ°€λŠ₯
    • C++, Java, Python, …
  • 반면 Cμ—μ„œλŠ” ν—ˆμš©
    • i.e. gender++, gender = 0;
  • Java, Java 5.0(2004)에 java.lang.Enum κΈ°λ³Έ νƒ€μž…μœΌλ‘œ 제곡
    • λͺ¨λ“  μ—΄κ±° νƒ€μž…μ€ λ¬΅μ‹œμ μœΌλ‘œ java.lang.Enum에 상속을 λ°›μŒ (μ •μˆ˜ν˜• X)
    • λ”°λΌμ„œ toString, ordinal, values λ“± λͺ‡λͺ‡ λ©”μ†Œλ“œλ“€μ„ μ‚¬μš© κ°€λŠ₯
  • ν₯λ―Έλ‘­κ²Œλ„ 슀크립트 μ–Έμ–΄ 쀑 μ—΄κ±° νƒ€μž…μ„ κΈ°λ³Έ νƒ€μž…μœΌλ‘œ μ§€μ›ν•˜λŠ” 것은 μ—†μŒ
    • ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ— 제곡
    • JavaScript, Python, Ruby, Lua, PHP, …

🫧 평가

μ—΄κ±°ν˜•μ€ 가독성과 신뒰성을 ν–₯μƒμ‹œν‚¨λ‹€.

μ—΄κ±°ν˜•μ€ μ‚°μˆ μ—°μ‚°μ„ ν—ˆμš©ν•˜μ§€ μ•Šκ³ (μ—΄κ±°ν˜•μ€ μ •μˆ˜ν˜•μ΄ μ•„λ‹˜), μ •μ˜λœ λ²”μœ„ λ°–μ˜ 값을 ν• λ‹Ή 받을 수 μ—†κΈ° λ•Œλ¬Έμ—.

C, μ—΄κ±°ν˜•μ„ μ •μˆ˜ν˜•μ²˜λŸΌ μ·¨κΈ‰, μ΄λŠ” 가독성을 ν–₯μƒμ‹œν‚€μ§€λ§Œ μ‹ λ’°μ„± 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆλ‹€.
C++, μ—΄κ²¨ν˜• 비ꡐ연산 μ‹œ μ •μˆ˜ν˜• νƒ€μž…μ²˜λŸΌ 닀뀄 질 수 μžˆλ‹€.

πŸ’« λΆ€λΆ„ λ²”μœ„ νƒ€μž…


  • μˆœμ„œ νƒ€μž…μ˜ μ—°μ†λœ λΆ€λΆ„ μˆœμ„œμ—΄(subsequence)
    • 예) 12..14

가독성과 신뒰성을 ν–₯μƒμ‹œμ§€λ§Œ, λŒ€λΆ€λΆ„ μ–Έμ–΄μ—μ„œ μ°¨μš©ν•˜μ§€ μ•ŠμŒ.

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.