Swift) switch 대신 if case, guard case 사용해보기
안녕하세요! 소들입니다! 아닌가 망아지들인가?
연사 끝나고 근 한달간 제대로 고장이 나버렸었네요.. 저의 모든 걸 포기 했었어요.
그래도 지금 글을 쓴단 것은!!?? 다시 예전의 나를 찾아가고 있는 중이랍니다 XD
하핳 안 궁금하셨다구요!? 어쩌라고
오랜만에 글을 쓰는 만큼, 가벼운 문법 주제로 담아보려고 합니다
개발을 하다보면 은근 많이 사용하게 되지만 .. 간혹 까먹어서 ..
읭? 어떻게 쓰더라? 했던.. ㅎ.. switch문을 guard / if 구문을 통해 쓰는 방법을 보겠슴니다
간단한 글 매우 짧을 예정
모든 포스팅은 편의 말투로 합니다~!!
1. 기존에 Switch 구문을 쓸 때는 마리야
자 다음과 같이 성을 나타내는 연관값이 없는 Enum이 하나 있다고 생각 해봅시다 :)
enum Gender {
case male
case female
}
|
자, 이제 화장실에 대한 메서드🚽를 하나 만드려고 해요
근데 여자 화장실엔 남자가 들어오면 안 되잖음?? 🙄
그럼 아마 기존엔 switch 구문을 써서 이렇게 구현했어야 할 거임
func useWomenRestroom(gender: Gender) {
switch gender {
case .male:
print("어머 나가세요")
return
default: break
}
} |
그쳐???
아 근디 .. 진지하게 어떤 예제로 설명할까 고민.. 했는데
이전 포스팅처럼 롤을 예제로 써버리면 롤 안하시는 여성 개발자분들이 생소할까봐 참았고..
왜 제 머리속에서 나온 예제는 이런 저세상인 건지..ㅎ 당최 모르겠으나 그냥 봅시다
원래 같으면 위처럼 switch 구문을 쓰는 게 정배잖음
근데 나는 gender라는 파라미터 값이 male이란 값일 때만 어떤 처리를 하고 싶은데
switch 구문을 쓰기엔 default 값에 대한 처리도 해줘야하구.. 길구.. 귀찮고.. 🥺
뭐 그렇지 않음??
따라서 이때,
if case / guard case란 것을 사용하면 코드를 아주 간결하게 줄일 수 있음!!
2. if case / guard case를 사용해보자!
func useWomenRestroom(gender: Gender) {
if case .male = gender {
print("어머 나가세요")
return
}
}
|
func useWomenRestroom(gender: Gender) {
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(gender: Gender) {
if case let .male(age) = gender, age > 4 {
print("어머 다 컸어요 나가세요")
return
}
}
|
그럴 경우, 위처럼 if case let을 써주고
그뒤에 비교하려는 case 값뒤에 괄호()를 통해서 연관값을 받을 상수의 이름을 써주면
연관값을 해당 상수로 사용할 수 있게 되는 것임!!
모양이 생소할 수 있찌만 이렇게 쓸 수 있음!
guard case let의 경우, 위 예제로 설명하기가 적절하지 않아
다른 예제로 설명을 하자면,
func useMenRestroom(gender: Gender) {
guard case let .male(age) = gender else{
print("어머 나가세요")
return
}
print(age) // 연관값 사용 가능
}
|
이번엔 남자화장실입니다만..?
쨌든 이렇게 guard case let 구문도 if case let과 똑같이 연관값을 바인딩하여
연관값을 사용할 수 있음!!!
.
.
.
오랜만에 글을 써서 그런가...? 예시가 왜저러지..?
쨌든 생각보다 많이 사용하고 쓰면 코드도 깔끔해져서 좋지만
잘 몰느느 사람들도 많ㅇ은 문법 포스팅 끝!
내일부턴 문법 말고 개념 포스팅 공부하면서 쓸구야