switch vs if case

Andrew·2023년 11월 13일
0
post-thumbnail

오늘은 Swift에서 제공하는 switch 문과 if case에 대해 이야기해보려고 한다.
switch 문과 if case는 열거형 자료형에서 해당 자료형의 case에 따라 적절하게 로직을 구현할 수 있게 도와준다.
(유사한 형태로 guard case, for case도 있으나 이번 글은 문법 이야기를 하는 것이 아니므로 패스!)

나는 가급적 if case보다는 switch 문을 좀 더 적극적으로 사용하려고 한다. 그동안 개발을 하면서 느낀 것이 if case가 코드 작성은 좀 더 편리하지만 (당장 필요한 case만 구현하면 되니) 예상치 못한 버그 혹은 이슈가 발생하는 코드가 될 가능성이 높다는 것이다.

예시)

if case UIDevice.currentDevice().orientation = .portrait { }

아이폰이 세로로 되어있을 때만 layout을 다르게 하고 싶다고 가정하자. 그럼 간단하게 if case로 orientationportrait일 때 layout을 다르게 지정해 주면 된다.
하지만 iOS에서 제공하는 orientation옵션에는 아이폰속 화면이 세로로 보여질 수 있는faceUp, faceDown,portraitUpsideDown 도 있다.
이 경우 사실상 세로로 아이폰을 사용한다는 조건을 만족하지만 세로 상태일 때 보여야 할 layout은 제대로 적용되지 않을 수 있다.

반면에 switch 문을 사용하게 될 경우 최소한 default 문을 사용해서 모든 경우를 대응할 수 있게 된다.

switch 문을 사용하는 것은 매우 귀찮게 느껴지고 어떤 경우에는 불필요한 코드가 늘어나는 것처럼 보이지만 후에 예상치 못할 사고를 방지할 수 있다.

이와 함께 switch를 사용하게 될 경우 위 사진에 있는 것처럼 @unknown default 여부도 확인할 수 있다.
unknown default는 미래에 생길 case에 대비해서 사전 처리를 요구한다.
이를 switch에서 구현하지 않으면 친히 warning까지 보여주며 개발자가 이를 챙길 수 있도록 알려준다.

if case를 사용하게 되면 편리함과 간결한 코드라는 이점을 갖게 된다. 하지만 빠르게 개발하고 배포해야 하는 환경에 놓이게 되면 orientation 같은 간단해 보이는 case도 예외 케이스를 미처 다 생각하지 못하고 급급하게 개발할 수 있다.
사람마다 성향도 다르고 스타일도 다르기에 무엇 하나를 강요할 수 없지만, 안정적인 서비스 제공이 높은 우선순위를 갖고 있는 나로선 switch문을 좀 더 선호하게 되는 것 같다.

profile
je suis un voyageur

0개의 댓글