ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Enumeration (μ—΄κ±°ν˜•), Raw Value (μ›μ‹œκ°’)
    Swift 2022. 2. 15. 08:37

    (λͺ¨λ“  μ½”λ“œλŠ” Playgroundμ—μ„œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.)

     

    이번 μ‹œκ°„μ—λŠ” μ—΄κ±°ν˜• (Enumeration)κ³Ό μ›μ‹œ κ°’ (Raw Value) 에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

     

     

    1. Enumeration

    μ—΄κ±°ν˜•μ€ μ—°κ΄€λœ μƒμˆ˜λ“€μ„ ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ 묢은 μžλ£Œν˜•μœΌλ‘œ, μ½”λ“œ λ‚΄μ—μ„œ μ•ˆμ „ν•˜κ²Œ 값을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.

    문법은 μ•„λž˜μ™€ κ°™λ‹€.

    μ—΄κ±°ν˜•μ— ν¬ν•¨λœ μƒμˆ˜λ“€μ€ μƒμˆ˜λΌ 읽지 μ•Šκ³ , Enumeration case λ˜λŠ” case라고 ν•œλ‹€.

    μ—΄κ±°ν˜•μ˜ 이름은 UpperCamelCase둜, case 이름은 lowerCamelCase둜 μ„ μ–Έν•œλ‹€.

     

    case 이름은 μ€‘λ³΅λ˜μ–΄μ„œλŠ” μ•ˆλ˜κ³ , caseName2, caseName3κ³Ό 같이 콀마(,)λ₯Ό μ΄μš©ν•˜μ—¬ ν•œ 쀄에 μ„ μ–Έν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

     

     

    μ•„λž˜ μ˜ˆμ‹œλŠ” μš”μΌμ„ μ—΄κ±°ν˜•μœΌλ‘œ μ„ μ–Έν•œ 것이닀. 

    enum Weekday {
        case monday
        case tuesday
        case wednesday
        case thursday
        case friday
        case saturday
        case sunday
    }

     

     

    μ—΄κ±°ν˜•μ˜ μΌ€μ΄μŠ€μ— μ ‘κ·Όν•  λ•Œμ—λŠ” μ•„λž˜μ™€ 같이 μ—΄κ±°ν˜•μ˜ 이름.μΌ€μ΄μŠ€ 이름 μœΌλ‘œ μ ‘κ·Όν•  수 μžˆλ‹€.

    Weekday.monday
    Weekday.tuesday
    Weekday.wednesday
    Weekday.thursday
    Weekday.friday
    Weekday.saturday
    Weekday.sunday
    
    
    var today = Weekday.sunday
    
    today = .saturday

     

    todayμ—λŠ” ν˜„μž¬ μ—΄κ±°ν˜• Weekdayκ°€ μ €μž₯λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ—, μ»΄νŒŒμΌλŸ¬κ°€ today의 μžλ£Œν˜•μ„ μ•Œκ³  μžˆλ‹€.

    λ”°λΌμ„œ 이 λ•ŒλŠ” μ—΄κ±°ν˜•μ˜ 이름을 μƒλž΅ν•  수 μžˆλ‹€. 반면, .κ³Ό μΌ€μ΄μŠ€ 이름은 μƒλž΅ν•  수 μ—†λ‹€.

     

     

     

    μ—΄κ±°ν˜•μ˜ caseλŠ” 독립적인 값이기 λ•Œλ¬Έμ— 비ꡐλ₯Ό ν•  λ•Œμ—λŠ” 비ꡐ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€.

    var today = Weekday.sunday
    
    today = .saturday
    
    if today == .sunday {
        print("λ‹€κ°€μ˜€λŠ” μ›”μš”μΌμ„ μ€€λΉ„ν•˜μ„Έμš”.")
    } else if today == .saturday {
        print("You can take a rest")
    } else {
        print("κ³΅λΆ€ν•˜μ„Έμš”.")
    }

     

     

    caseλ₯Ό κΈ°μ€€μœΌλ‘œ μ½”λ“œλ₯Ό λΆ„κΈ°ν•  λ•Œμ—λŠ” μ•„λž˜μ™€ 같이 switch 문을 주둜 μ‚¬μš©ν•œλ‹€.

    var today = Weekday.sunday
    
    today = .saturday
    
    switch today {
    case .saturday:
        "You can take a rest"
    case .sunday:
        "λ‹€κ°€μ˜€λŠ” μ›”μš”μΌμ„ μ€€λΉ„ν•˜μ„Έμš”."
    default:
        "μΌν•˜μ„Έμš”."
    }

     

     

    λ˜ν•œ, μ—΄κ±°ν˜•μ˜ λͺ¨λ“  caseλ₯Ό switch λ¬Έμ—μ„œ λ§€μΉ­μ‹œν‚¬ 수 μžˆλ‹€λ©΄, default 블둝을 μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

    var today = Weekday.sunday
    
    today = .saturday
    
    switch today {
    case .saturday:
        "You can take a rest"
    case .sunday:
        "λ‹€κ°€μ˜€λŠ” μ›”μš”μΌμ„ μ€€λΉ„ν•˜μ„Έμš”."
    case .monday, .tuesday, .wednesday, .tuesday, .friday:
        "μΌν•˜μ„Έμš”"
    }

     

     

    2. Raw Value (μ›μ‹œκ°’)

    Enumeration caseλŠ” κ·Έ 자체둜 독립적인 κ°’μ΄μ§€λ§Œ, μ—΄κ±°ν˜• 내뢀에 또 λ‹€λ₯Έ 값을 μ €μž₯ν•  수 μžˆλ‹€.

    이 값을 Raw Value (μ›μ‹œκ°’)이라고 ν•˜λŠ”λ°, μ—΄κ±°ν˜•μ˜ μΌ€μ΄μŠ€μ™€ κ΄€λ ¨λœ 또 λ‹€λ₯Έ 값을 ν•¨κ»˜ μ €μž₯ν•΄μ•Όν•  λ•Œ μ„ νƒμ μœΌλ‘œ μ €μž₯ν•œλ‹€.

     

    문법은 μ•„λž˜μ™€ κ°™λ‹€.

     

    μ›μ‹œν˜•μ˜ μžλ£Œν˜•μœΌλ‘œλŠ” String, Character, Number Typesκ°€ 올 수 μžˆλ‹€.

    μ›μ‹œκ°’μ„ μ €μž₯ν•˜λŠ” 뢀뢄은 μƒλž΅ν•΄λ„ λ˜λŠ”λ°, μžλ£Œν˜•λ§ˆλ‹€ μ •ν•΄μ§„ κ·œμΉ™μ— μ˜ν•΄ κΈ°λ³Έ 값이 μ €μž₯λœλ‹€.

     

    μ›μ‹œκ°’ μžλ£Œν˜•μ„ μ„ μ–Έν•˜λ©΄, μ›μ‹œκ°’μ— μ ‘κ·Όν•  수 μžˆλŠ” 속성이 μ œκ³΅λ˜λŠ”λ° 이λ₯Ό rawValue라고 ν•œλ‹€.

     

     

    μ•„λž˜ μ˜ˆμ‹œλŠ” μ•žμ„œ μ„ μ–Έν–ˆλ˜ μ—΄κ±°ν˜• Weekday의 μ›μ‹œκ°’μ˜ μžλ£Œν˜•μ„ Int둜 μ„ μ–Έν•œ 것이닀.

     

    μ›μ‹œκ°’μ„ 직접 μ €μž₯ν•΄μ£Όμ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ—, 첫번째 μΌ€μ΄μŠ€μΈ mondayμ—λŠ” rawValue둜 0이, 그리고 μ°¨λ‘€λŒ€λ‘œ 1λΆ€ν„° 6κΉŒμ§€μ˜ 값이 μ €μž₯된 것을 λ³Ό 수 μžˆλ‹€.

     

    이처럼 μ›μ‹œκ°’μ„ 직접 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ 값이 μžλ™μœΌλ‘œ μ €μž₯λ˜λŠ”λ°, κΈ°μ€€ 값은 항상 이전 값이닀.

     

    λ§Œμ•½ μ•„λž˜μ²˜λŸΌ case thursday에 μ›μ‹œκ°’μ„ 직접 μ§€μ •ν•΄μ£Όλ©΄, κ·Έ 이후 μΌ€μ΄μŠ€μ˜ μ›μ‹œκ°’μ€ thursdayμ—μ„œ 1이 μ¦κ°€ν•œ 값이 λœλ‹€.

     

     

    λ˜ν•œ, μ›μ‹œκ°’μ˜ μ„ μ–Έ μ΄ν›„μ—λŠ” μ›μ‹œκ°’μ„ λ³€κ²½ν•  수 μ—†λ‹€. 'rawValue' is immutableμ΄λž€ λ©”μ‹œμ§€λ₯Ό λ³Ό 수 μžˆλ‹€.

     

     

    μ—΄κ±°ν˜•μ˜ μΌ€μ΄μŠ€λ₯Ό μƒμ„±μžλ₯Ό μ΄μš©ν•˜μ—¬ μƒμ„±ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

     

    νŒŒλΌλ―Έν„°λ‘œ rawValueλ₯Ό μ „λ‹¬ν•˜λ©΄, κ·Έ rawValue에 ν•΄λ‹Ήν•˜λŠ” caseκ°€ μƒμ„±λœλ‹€.

    λ§Œμ•½ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” rawValueλ₯Ό μ „λ‹¬ν•˜λ©΄ nil을 λ¦¬ν„΄ν•œλ‹€. λ”°λΌμ„œ μƒμ„±μžμ˜ λ¦¬ν„΄ν˜•μ€ Optional + μ—΄κ±°ν˜• νƒ€μž…μ΄λ‹€.

     

     

     

    κ·Έλ ‡λ‹€λ©΄ μ›μ‹œκ°’μ˜ μžλ£Œν˜•μ„ Stringκ³Ό Character둜 μ„ μ–Έν•˜λŠ” κ²½μš°λŠ” μ–΄λ–¨κΉŒ?

     

    λ¨Όμ € μ›μ‹œκ°’μ˜ μžλ£Œν˜•μ„ String으둜 μ„ μ–Έν•˜κ³  μ›μ‹œκ°’μ„ μ €μž₯ν•˜μ§€ μ•ŠμœΌλ©΄, μΌ€μ΄μŠ€ 이름과 λ™μΌν•œ λ¬Έμžμ—΄μ΄ μ›μ‹œκ°’μœΌλ‘œ μ €μž₯λœλ‹€.

    λ¬Όλ‘ , μ›μ‹œκ°’μ— 직접 λ¬Έμžμ—΄μ„ μ €μž₯ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

     

     

     

    μ›μ‹œκ°’μ˜ μžλ£Œν˜•μ„ Character둜 μ„ μ–Έν•  κ²½μš°μ—λŠ”, λ°˜λ“œμ‹œ μ›μ‹œκ°’μ„ 직접 μ§€μ •ν•΄μ£Όμ–΄μ•Όν•œλ‹€.

    λ§Œμ•½ μ›μ‹œκ°’μ„ μ €μž₯ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄, μ•„λž˜μ™€ 같이 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

     

     

    Character ν˜•μ—λŠ” ν•˜λ‚˜μ˜ 문자만 μ €μž₯ν•  수 있기 λ•Œλ¬Έμ—, String처럼 μΌ€μ΄μŠ€ 이름과 λ™μΌν•œ 값을 μ €μž₯ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λ°˜λ“œμ‹œ μ›μ‹œκ°’μ„ 지정해주도둝 ν•˜μž.

    'Swift' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [Swift] CGColor  (0) 2022.02.15
    [Swift] CGFloat  (0) 2022.02.15
    [Swift] Collection (Array, Dictionary, Set)  (0) 2022.02.15
    [Swift] Tuples  (0) 2022.02.15
    [Swift] Closure, Syntax Optimization  (0) 2022.02.15

    λŒ“κΈ€

Designed by Tistory.