본문 바로가기

iOS/Swift

Swift) switch 대신 if case, guard case 사용해보기

 

 

 

안녕하세요! 소들입니다! 아닌가 망아지들인가?

연사 끝나고 근 한달간 제대로 고장이 나버렸었네요.. 저의 모든 걸 포기 했었어요.

그래도 지금 글을 쓴단 것은!!?? 다시 예전의 나를 찾아가고 있는 중이랍니다 XD

하핳 안 궁금하셨다구요!? 어쩌라고

 

오랜만에 글을 쓰는 만큼, 가벼운 문법 주제로 담아보려고 합니다

개발을 하다보면 은근 많이 사용하게 되지만 .. 간혹 까먹어서 ..

읭? 어떻게 쓰더라? 했던.. ㅎ.. switch문을 guard / if 구문을 통해 쓰는 방법을 보겠슴니다

 

간단한 글 매우 짧을 예정

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. 기존에 Switch 구문을 쓸 때는 마리야

 

자 다음과 같이 성을 나타내는 연관값이 없는 Enum이 하나 있다고 생각 해봅시다 :)

 

 

enum Gender {
    case male
    case female
}

 

 

자, 이제 화장실에 대한 메서드🚽를 하나 만드려고 해요

근데 여자 화장실엔 남자가 들어오면 안 되잖음?? 🙄

그럼 아마 기존엔 switch 구문을 써서 이렇게 구현했어야 할 거임

 

 

func useWomenRestroom(genderGender) {
    switch gender {
    case .male:
        print("어머 나가세요")
        return
    defaultbreak
    }
}

 

 

그쳐???

아 근디 .. 진지하게 어떤 예제로 설명할까 고민.. 했는데

이전 포스팅처럼 롤을 예제로 써버리면 롤 안하시는 여성 개발자분들이 생소할까봐 참았고..

왜 제 머리속에서 나온 예제는 이런 저세상인 건지..ㅎ 당최  모르겠으나 그냥 봅시다

 

원래 같으면 위처럼 switch 구문을 쓰는 게 정배잖음

근데 나는 gender라는 파라미터 값이 male이란 값일 때만 어떤 처리를 하고 싶은데

switch 구문을 쓰기엔 default 값에 대한 처리도 해줘야하구.. 길구.. 귀찮고.. 🥺

뭐 그렇지 않음?? 

 

따라서 이때,

if case / guard case란 것을 사용하면 코드를 아주 간결하게 줄일 수 있음!!

 

 

 

 

2. if case / guard case를 사용해보자!

 

 

func useWomenRestroom(genderGender) {
   if case .male = gender {
        print("어머 나가세요")
        return
   }
}

 

func useWomenRestroom(genderGender) {
    guard case .female = gender else {
        print("어머 나가세요")
        return
   }
}

 

 

요렇게!!

if case, guard case를 활용해서 원하는 case로만 비교를 할 수 있음!

(물론 추가로 원하는 조건문을 추가할 수도 있구)

 

여기서 사용법이.. 조금 헷갈릴 수 있는데,

if case / guard case .비교하고싶은case = 해당열거형타입의값

이렇게 보면 됨!!! 

 

if let과 guard let은 서로 조건이 반대여서 헷갈릴 수 있으니 조심하셈

쨌든 이러면 쓸데없는 코드를 줄일 수 있고 가독성도 훨 좋져!?!? XD

 

 

 

 

3.  if case let / guard case let를 사용해보자!

 

2번이랑 뭐가 달라졌냐구요!?! case 뒤에 let이란게 붙었움!!!

왜 붙었냐구요!?!?!? 연관값이 있는 열거형을 처리하기 위해서임!!

 

 

enum Gender {
    case male(age: Int)
    case female
}

 

 

에잏ㅎ 남자 애기는 4살까지 여자 화장실 와도 봐주자ㅎㅎ 엄마랑 온거겠찌ㅎㅎ

라는 조건을 추가하기 위해

위처럼 male일 경우, age라는 연관값을 받는 열거형을 만들었음

그럼 이제 연관값을 바인딩해서 사용해야 하잖음?

 

 

func useWomenRestroom(genderGender) {
   if case let .male(age) = gender, age > 4 {
        print("어머 다 컸어요 나가세요")
        return
   }
}

 

 

그럴 경우, 위처럼  if case let을 써주고

그뒤에 비교하려는 case 값뒤에 괄호()를 통해서 연관값을 받을 상수의 이름을 써주면

연관값을 해당 상수로 사용할 수 있게 되는 것임!!

모양이 생소할 수 있찌만 이렇게 쓸 수 있음!

 

guard case let의 경우, 위 예제로 설명하기가 적절하지 않아

다른 예제로 설명을 하자면,

 

 

func useMenRestroom(genderGender) {
  guard case let .male(age) = gender else{
        print("어머 나가세요")
        return
  }
  print(age)     // 연관값 사용 가능
}

 

 

이번엔 남자화장실입니다만..?

쨌든 이렇게 guard case let 구문도 if case let과 똑같이 연관값을 바인딩하여 

연관값을 사용할 수 있음!!!

 

 

 

 

 

.

.

.

오랜만에 글을 써서 그런가...? 예시가 왜저러지..?

쨌든 생각보다 많이 사용하고 쓰면 코드도 깔끔해져서 좋지만

잘 몰느느 사람들도 많ㅇ은 문법 포스팅 끝!

내일부턴 문법 말고 개념 포스팅 공부하면서 쓸구야

 

 

 



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday