[Go] enum ์‚ฌ์šฉํ•˜๊ธฐ

2025. 11. 10. 16:46ยทํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/Go

 

๋“ค์–ด๊ฐ€๋ฉฐ

Go๋Š” ๊ณต์‹์ ์œผ๋กœ enum ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์€ ์‰ฌ์šฐ๋‹ˆ ๋ช‡๊ฐœ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ const + iota๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ํƒ€์ž… ์ •์˜(type alias)๋กœ ์—ด๊ฑฐํ˜•๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ iota๋ฅผ ์ด์šฉํ•œ Enum

package main

import "fmt"

// Weekday ํƒ€์ž… ์ •์˜
type Weekday int

// iota๋ฅผ ์ด์šฉํ•œ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜ ์„ ์–ธ
const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

func main() {
    fmt.Println(Sunday, Monday, Tuesday) // 0 1 2
    fmt.Printf("%T\n", Sunday)           // main.Weekday
}
  • iota๋Š” const ๋ธ”๋ก ๋‚ด์—์„œ 0๋ถ€ํ„ฐ ์ž๋™ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Weekday ํƒ€์ž…์„ ์„ ์–ธํ•ด์„œ, ํƒ€์ž… ์•ˆ์ „์„ฑ๋„ ํ™•๋ณด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ int ๊ฐ’๊ณผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(type wrapping).

 

String ์ถœ๋ ฅ์šฉ Enum

package main

import "fmt"

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

// Weekday๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
func (w Weekday) String() string {
    return [...]string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}[w]
}

func main() {
    day := Wednesday
    fmt.Println(day)         // Wednesday
    fmt.Println(int(day))    // 3
}
  • [...string]{} ๋ฐฐ์—ด์„ ํ™œ์šฉํ•ด์„œ enum ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • String() ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์œผ๋กœ fmt.Println์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

 

bitmask Enum ์˜ˆ์ œ (Flags)

package main

import "fmt"

type Permission uint8

const (
    Read Permission = 1 << iota  // 1
    Write                        // 2
    Execute                      // 4
)

func main() {
    var p Permission = Read | Write
    fmt.Println(p&Read != 0)   // true
    fmt.Println(p&Execute != 0) // false
}
  • iota + ๋น„ํŠธ ์—ฐ์‚ฐ์œผ๋กœ ๊ถŒํ•œ ํ”Œ๋ž˜๊ทธ(enum flags) ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • | ์—ฐ์‚ฐ์œผ๋กœ ์กฐํ•ฉํ•˜๊ณ , & ์—ฐ์‚ฐ์œผ๋กœ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋ž˜๊ทธ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ด ์ž์ฃผ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

์‹ค๋ฌดํ˜• ์˜ˆ์ œ: ์ƒํƒœ๊ฐ’ Enum

package main

import "fmt"

// Order ์ƒํƒœ ์ •์˜
type OrderStatus int

const (
    Pending OrderStatus = iota
    Paid
    Shipped
    Completed
    Cancelled
)

func (s OrderStatus) String() string {
    return [...]string{"Pending", "Paid", "Shipped", "Completed", "Cancelled"}[s]
}

func main() {
    var status OrderStatus = Shipped

    switch status {
    case Pending, Paid:
        fmt.Println("Order not delivered yet")
    case Shipped:
        fmt.Println("Order is on the way")
    case Completed:
        fmt.Println("Order delivered")
    case Cancelled:
        fmt.Println("Order cancelled")
    }

    fmt.Println(status) // Shipped
}

 

  • ๋‹ค๋ฅธ int ๊ฐ’๊ณผ ํ˜ผ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž„์œผ๋กœ์จ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • String() ๋ฉ”์„œ๋“œ๋กœ ๋””๋ฒ„๊น…/๋กœ๊ทธ ์ถœ๋ ฅ์ด ์‰ฝ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • Switch-case์™€ ์กฐํ•ฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ ๊ด€๋ฆฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด > Go' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Go] ์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ ๋กœ๊ทธ ์ œ๋Œ€๋กœ ๋‚จ๊ธฐ๊ธฐ(Logging)  (0) 2025.11.10
[Go] ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ์Šค์ผ€์ค„๋Ÿฌ ๋™์ž‘ํ•˜๊ธฐ(Ticker)  (0) 2025.11.07
[Go] ํ˜•์‹์ง€์ •์ž Format ์ •๋ฆฌ(%v,%s,%d ๋“ฑ)  (0) 2025.11.07
[Go] Map ์›๋ฆฌ์™€ ํ™œ์šฉ(feat. hash)  (0) 2025.11.05
[Go] ์Šฌ๋ผ์ด์Šค(slice)์—๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋‹ค  (0) 2025.10.14
'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/Go' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Go] ์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ ๋กœ๊ทธ ์ œ๋Œ€๋กœ ๋‚จ๊ธฐ๊ธฐ(Logging)
  • [Go] ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค ์Šค์ผ€์ค„๋Ÿฌ ๋™์ž‘ํ•˜๊ธฐ(Ticker)
  • [Go] ํ˜•์‹์ง€์ •์ž Format ์ •๋ฆฌ(%v,%s,%d ๋“ฑ)
  • [Go] Map ์›๋ฆฌ์™€ ํ™œ์šฉ(feat. hash)
์„œ์•„๋ž‘๐Ÿ˜ƒ
์„œ์•„๋ž‘๐Ÿ˜ƒ
Just Do It๐Ÿ’ช
  • ์„œ์•„๋ž‘๐Ÿ˜ƒ
    G-Stack
    ์„œ์•„๋ž‘๐Ÿ˜ƒ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (144)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (78)
        • C++ ๊ธฐ์ดˆ (28)
        • C++ ์‘์šฉ (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • ์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ (31)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (12)
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • ๋””์ž์ธํŒจํ„ด (5)
      • ์„œ๋น„์Šค & ํˆด (7)
      • ํŠธ๋ Œ๋“œ&์ด์Šˆ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • G์Šคํƒ์˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํŒŒ์ด์ฌ
    cpu
    ๋””์ž์ธํŒจํ„ด
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
    ์ปดํ“จํ„ฐ
    ์กฐ๊ฑด๋ฌธ
    ํฌ์ธํ„ฐ
    pointer
    RAM
    Thread
    fork
    ๋ฐ˜๋ณต๋ฌธ
    component
    go
    ์žฌ๊ท€
    ์Šคํƒ
    ํŒŒ์ผ์ž…์ถœ๋ ฅ
    c++
    STD
    ํ•˜๋“œ๋””์Šคํฌ
    init
    ๋ฉ”๋ชจ๋ฆฌ
    ํ•จ์ˆ˜
    ํŒจํ‚ค์ง€
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ
    ๋ณ€์ˆ˜
    ๋ฐฐ์—ด
    ์ƒ์†
    c
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์„œ์•„๋ž‘๐Ÿ˜ƒ
[Go] enum ์‚ฌ์šฉํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”