
๋ค์ด๊ฐ๋ฉฐ
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 |
๋๊ธ