🔥 열거형과 switch 문
열거형의 각 case 값은 switch
문을 사용해 매칭할 수 있습니다. 예를 들어, CompassPoint
열거형을 사용해 봅시다.
enum CompassPoint { case north case south case east case west } var directionToHead = CompassPoint.south
swift
여기서 directionToHead
변수는 CompassPoint
열거형의 값 중 하나를 가질 수 있죠. 이제 switch
문을 사용해 directionToHead
의 값에 따라 다른 동작을 수행해 볼까요?
switch directionToHead { case .north: print("Lots of planets have a north") // 많은 행성에는 북쪽이 있어요 case .south: print("Watch out for penguins") // 펭귄을 조심하세요 case .east: print("Where the sun rises") // 해가 뜨는 곳이에요 case .west: print("Where the skies are blue") // 하늘이 푸른 곳이죠 } // "Watch out for penguins" 출력
swift
이 코드를 다음과 같이 읽을 수 있습니다:
"directionToHead
의 값을 살펴봅시다. 만약 .north
와 같다면, "Lots of planets have a north"
를 출력합니다. .south
와 같다면, "Watch out for penguins"
를 출력하는 거죠."
이런 식으로 .east
와 .west
에 대해서도 처리합니다.
제어 흐름에서 설명한 것처럼, 열거형의 case를 다룰 때 switch
문은 반드시 모든 경우를 포괄해야 합니다. 만약 .west
에 대한 case
를 생략한다면, 이 코드는 컴파일되지 않을 거예요. 왜냐하면 CompassPoint
의 모든 case를 고려하지 않았기 때문이죠. 완전성을 요구하는 것은 열거형의 case가 실수로 누락되는 것을 방지합니다.
그런데 때로는 열거형의 모든 case에 대해 case
를 제공하는 것이 적절하지 않을 수 있어요. 이럴 때는 default
case를 제공해 명시적으로 다루지 않은 나머지 case들을 처리할 수 있습니다.
enum Planet { case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune } let somePlanet = Planet.earth switch somePlanet { case .earth: print("Mostly harmless") // 대체로 무해해요 default: print("Not a safe place for humans") // 인간에게 안전한 곳은 아니에요 } // "Mostly harmless" 출력
swift
이렇게 하면 somePlanet
이 .earth
인 경우에는 "Mostly harmless"를 출력하고, 나머지 모든 경우에는 "Not a safe place for humans"를 출력하게 됩니다.
열거형과 switch
문을 활용하면 코드의 가독성과 안전성을 높일 수 있답니다. 열거형으로 사용 가능한 값의 범위를 명확히 하고, switch
문으로 모든 경우를 빠짐없이 처리하도록 강제할 수 있으니까요.