λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

swift λ¬Έλ²•πŸ–€

[SWIFT] μ—΄κ±°ν˜•(Enumerations)

μ—΄κ±°ν˜•μ΄λž€?
μ—°κ΄€λœ μƒμˆ˜(μΌ€μ΄μŠ€)듀을 ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ 묢은 μžλ£Œν˜• (νƒ€μž…)
  • μΌ€μ΄μŠ€κ°€ 선택가λŠ₯ν•˜κ³  ν•œμ •λœ κ°€μ§“ 수둜 μ •ν•΄μ Έ μžˆμ„λ•Œ μ •μ˜
  • 개발자 λ§ˆμŒλŒ€λ‘œ λ§Œλ“€ 수 있느 μžλ£Œν˜• (μžλ£Œν˜•μ˜ 1κ·œμΉ™ : μ²«κΈ€μž λŒ€λ¬Έμžλ₯Ό μ§€μΌœμ•Ό 함)
  • μ½”λ“œμ˜ 가독성과 μ•ˆμ •μ„±μ΄ 높아짐 ==> λͺ…ν™•ν•œ λΆ„κΈ° 처리 κ°€λŠ₯ 
  • caseμ—μ„œ λ²—μ–΄λ‚˜λ©΄ 였λ₯˜λ₯Ό λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ•ˆμ •μ 

 

μ—΄κ±°ν˜•μ„ μ–Έμ œ μ‚¬μš©ν• κΉŒ?

 

 [ν•œμ •λœ 사둀(μ •ν•΄μ§„ 갯수) μ•ˆμ—μ„œ μ •μ˜ν•  수 μžˆμ„λ•Œ]

 

 - μ›” / ν™” / 수 / λͺ© / 금 / ν†  / 일

 - 동 / μ„œ / 남 / 뢁

 - 쒌둜 μ •λ ¬ / κ°€μš΄λ° μ •λ ¬ / 우츑 μ •λ ¬

 - μ΄ˆλ“±ν•™κ΅ / 쀑학ꡐ / 고등학ꡐ / λŒ€ν•™κ΅

 - 남 / μ—¬

 - κ°€μœ„ / λ°”μœ„ / 보

 

enum School
{
    case eliimentary
    case middle
    case high
    case university
}
var school:School = School.university

universityλ³€μˆ˜κ°€ School μžλ£Œν˜•μ„ μ“°λŠ” 것이 λͺ…ν™•ν•˜λ‹€λ©΄ (μœ„μ— 선언이 λ˜μ—ˆλ‹€λ©΄) μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

school = .middle

 

μ—΄κ±°ν˜•μ˜ λΆ„κΈ°μ²˜λ¦¬?

항상 switch문으둜 λΆ„κΈ°μ²˜λ¦¬ κ°€λŠ₯

switch school {
case .elimentary:
    print("μ΄ˆλ“±ν•™μƒμž…λ‹ˆλ‹€.")
case .middle:
    print("μ€‘ν•™μƒμž…λ‹ˆλ‹€.")
case .high:
    print("κ³ λ“±ν•™μƒμž…λ‹ˆλ‹€.")
case .university:
    print("λŒ€ν•™μƒμž…λ‹ˆλ‹€.")
}

 

μ—΄κ±°ν˜•μ˜ μ›μ‹œκ°’(Raw Value)?

λ§€μΉ­λ˜λŠ” κΈ°λ³Έκ°’(μ •μˆ˜/λ¬Έμžμ—΄)을 μ •ν•΄, μ—΄κ±°ν˜•μ„ μ’€ 더 μ‰½κ²Œ ν™œμš© κ°€λŠ₯

μ—¬λŸ¬κ°€μ§€μ˜ ν˜•νƒœλ‘œ μ›μ‹œκ°’μ„ μ •μ˜ν•  수 μžˆλ‹€. (Hashableν•œ - Int / String / Character / Double λ“± κ°€λŠ₯)

enum Alignment: Int {
    case left
    case center
    case right
}
let align = Alignment(rawValue: 0)    // μΈμŠ€ν„΄μŠ€ μƒμ„±μ‹œ - μ˜΅μ…”λ„νƒ€μž…μœΌλ‘œ 리턴 (μ‹€νŒ¨κ°€λŠ₯)
let leftValue = Alignment.center.rawValue     // μ ‘κ·Όμ—°μ‚°μžλ₯Ό 톡해 μ›μ‹œκ°’ μžμ²΄μ—λ„ μ ‘κ·Όκ°€λŠ₯

Int의 경우 μ›μ‹œκ°’μ„ μž…λ ₯μ•ˆν•˜λ©΄ 0,1,2 μ΄λ ‡κ²Œ μžλ™μœΌλ‘œ μ €μž₯됨 (μ •μˆ˜μ˜ 경우 μˆ«μžκ°€ ν•˜λ‚˜μ”© 증가)

enum Alignment1: String {
    case left = "L"
    case center = "C"
    case right = "R"
}
Alignment1(rawValue: "C")             // (κ°€λŠ₯ν•˜μ§€λ§Œ) λ¬Έμžμ—΄ λ°©μ‹μœΌλ‘œλŠ” 잘 μ‚¬μš©ν•˜μ§€λŠ” μ•ŠμŒ
let centerValue = Alignment1.center.rawValue

 

μ—΄κ±°ν˜•μ˜ μ—°κ΄€κ°’(Raw Value)?

ꡬ체적인 좔가정보λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

νƒ€μž…μ— κ΅­ν•œλ˜μ§€ μ•ŠμŒ

  • 각 μΌ€μ΄μŠ€λ³„λ‘œ μƒμ΄ν•œ νŠΉμ§•μ΄ 있고, 그것을 μ €μž₯ / ν™œμš© ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ
  • κ°œλ³„ μΌ€μ΄μŠ€λ§ˆλ‹€ μ €μž₯ν•  ν˜•μ‹μ„ λ”°λ‘œ μ •μ˜ (μžλ£Œν˜•μ˜ μ œν•œμ΄ μ—†μŒ / νŠœν”Œμ˜ ν˜•νƒœ)
  • ν•˜λ‚˜μ˜ μΌ€μ΄μŠ€μ— μ„œλ‘œ λ‹€λ₯Έ 연관값을 μ €μž₯ν•  수 있음 ===> μ„ μ–Έμ‹œμ μ΄ μ•„λ‹ˆλΌ , μƒˆλ‘œμš΄ μ—΄κ±°ν˜• 값을 생성할 λ•Œ μ €μž₯
enum Computer {
    case cpu(core: Int, ghz: Double)
    case ram(Int, String)
    case hardDisk(gb: Int)
}
let chip1 = Computer.cpu(core: 8, ghz: 3.5)
let chip2 = Computer.ram(16, "DRAM")
let chip3 = Computer.hardDisk(gb: 128)

μ›μ‹œκ°’μ˜ ν™œμš©?

var chip = Computer.cpu(core: 8, ghz: 2.0)
switch chip {
case .cpu(core: 8, ghz: 3.1):
    print("CPU 8μ½”μ–΄ 3.1GHzμž…λ‹ˆλ‹€.")
case .cpu(core: 8, ghz: 2.6):
    print("CPU 8μ½”μ–΄ 2.6GHzμž…λ‹ˆλ‹€.")
case .ram(32, _):
    print("32κΈ°κ°€λž¨ μž…λ‹ˆλ‹€.")
default:
    print("κ·Έ μ΄μ™Έμ˜ μΉ©μ—λŠ” 관심이 μ—†μŠ΅λ‹ˆλ‹€.")
}

μ›μ‹œκ°’(Raw Values)κ³Ό μ—°κ΄€κ°’(Associated Values)의 차이?

  1. μžλ£Œν˜• μ„ μ–Έ 방식: μ„ μ–Έν•˜λŠ” μœ„μΉ˜κ°€ 닀름
  2. μ„ μ–Έ ν˜•μ‹: (1) μ›μ‹œκ°’ ===> 2가지쀑 1κ°€μ§€ 선택 / (2)μ—°κ΄€κ°’ ===> νŠœν”Œμ˜ ν˜•νƒœλ‘œ ν˜•μ‹ μ œν•œ μ—†μŒ
  3. κ°’μ˜ μ €μž₯ μ‹œμ : (μ›μ‹œκ°’: μ„ μ–Έμ‹œμ  / μ—°κ΄€κ°’: μƒˆλ‘œμš΄ μ—΄κ±°ν˜• 값을 μƒμ„±ν• λ•Œ )
  4. μ„œλ‘œ 배타적: ν•˜λ‚˜μ˜ μ—΄κ±°ν˜•μ—μ„œ μ›μ‹œκ°’κ³Ό 연관값을 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ 함