프로그래밍중간 iOS 개발자

스위프트에서 switch를 사용한 패턴 매칭은 어떻게 작동합니까? 복잡한 패턴을 작성할 때 주의해야 할 사항은 무엇입니까?

Hintsage AI 어시스턴트로 면접 통과

답변.

스위프트에서 switch 구조는 확장된 패턴 매칭을 지원합니다: 특정 case에 조건을 추가하기 위해 where를 사용할 수 있습니다. 이를 통해 복잡한 비즈니스 논리와 필터링을 구현할 수 있습니다.

예:

enum Person { case student(score: Int) case teacher(specialty: String) } let people = [Person.student(score: 95), Person.teacher(specialty: "Math"), Person.student(score: 65)] for person in people { switch person { case .student(let score) where score > 90: print("우수한 성적자: \(score)") case .teacher(let specialty): print("과목 교사: \(specialty)") default: print("기타 경우") } }

where를 사용하면 가독성이 향상되고 코드 중복을 피할 수 있지만, 너무 복잡한 조건은 유지 보수를 악화시킬 수 있으며, 연관 값이 있는 패턴 매칭은 case의 순서를 명확히 제어해야 합니다.

함정 질문.

질문: "switch 내에서 where와 함께 패턴 매칭을 할 때 각 case에서 고유한 이름의 변수를 호출해야 합니까?"

답변: 아니오, 하지만 혼란을 피하기 위해 권장됩니다. 다른 case에서 동일한 변수 이름을 사용하면 해당 case에 국한된 컨텍스트가 형성되지만, 동일한 이름은 가독성 및 코드 유지 보수에 방해가 될 수 있습니다.

예:

switch value { case .status(let code) where code == 200: print("확인됨") case .status(let code) where code == 404: print("찾을 수 없음")

주제에 대한 세부 사항을 모른 채 발생한 실제 오류 사례.


이야기 1

은행 애플리케이션에서 여러 개의 where 조건이 포함된 상태 분석 섹션이 있었습니다. break를 놓치고 case 순서가 잘못되어 특정 경우가 처리되지 않아 사용자가 작업에 대한 전체 상태를 볼 수 없는 상황이 발생했습니다. 버그는 현장 테스트에서만 발견되었습니다.


이야기 2

인증 시스템에서 개발자가 서로 다른 case에서 동일한 변수 이름을 사용하여 혼란과 버그가 발생했습니다: 두 번째 경우에서 다른 case에서 정의된 변수를 사용하려고 했습니다. 빌드는 작동했지만 특정 시나리오에서 잘못되었습니다.


이야기 3

where와 함께 복잡한 패턴 매칭을 할 때 default가 연관된 enum의 일부 조합을 처리하지 못한다는 점을 고려하지 않아 애플리케이션이 패턴 매칭 실패 오류로 종료되었습니다. 문제는 향후 새로운 데이터 유형을 통합할 때만 발견되었습니다.