티스토리 뷰
안녕하세요! Swallow입니다!
이번 포스팅은
⭐️ 열거형 case 패턴 ⭐️
관한 글입니다!
항상 어떠한 조언, 충고 환영입니다!
시작하기에 앞서 이 글은
앨런 Swift 문법 마스터 스쿨 강의와 야곰님의 스위프트 프로그래밍 책을
공부하고 참고하여 작성하였습니다!
그럼 시작하겠습니다!
자! 그러면
열거형 case패턴에 대해 알아보겠습니다!
열거형 case패턴 이란?
케이스 내부에 구체적인 정보(연관값)가 들어있고,
구체적인 정보를 꺼내서
활용을 하기 위해
변수에 바인딩을 하여
사용하는 패턴입니다!
즉, let 변수이름 = 열거형 내부의 연관값
이런 의미입니다!
그러면 이제 구체적인
열거형 case패턴의 사용법과 사용하는 경우를 알아봐야 하겠죠?
저희가 오늘 배울 내용은!
옵셔널 열거형일 경우와
열거형 case 패턴으로 연관값을 다루는 내용입니다!
윽...
글로 적으니까 헷갈리네요..
예시를 바로 보여드릴게요!
enum Pizza {
case domino
case pizzahut
case pizzaalvolo
}
var favorite: Pizza? = .domino
옵셔널 게시글에서
옵셔널은 열거형으로 이루어져 있다고 말씀드렸습니다!
기억이 잘 나지 않으신 분들은
이 글을 보고 와주세요!
옵셔널(Optional) 정복하기 - 1장
아무튼!
옵셔널은 열거형으로 구현이 되어있는데,
값을 갖는 경우에는 some case
nil일 경우에는 none case가 됩니다!
여기서 옵셔널 열거형에 대한 설명을 드리자면!
some case 연관값 부분에
열거형의 case가 들어갑니다!
쉽게 말씀드리자면,
some case 연관값 부분에
열거형의 case들이 들어간다고 말씀드렸잖아요?
즉, case .some(Pizza.domino)
이런 식으로 연관값 내부에
열거형의 case가 들어간다고 생각하시면 됩니다!
case 중에 하나만 예시로 들었지만
옵셔널 열거형으로 선언된
Pizza 열거형의
모든 case들이 저런 식으로 some case 연관값 부분에
들어가 있다고 생각하시면 됩니다!
설명을 들으니 좀 이해가 되시나요?
저도 처음에 이해할 때 어려웠습니다! 🥲
enum Pizza {
case domino
case pizzahut
case pizzaalvolo
}
var favorite: Pizza? = .domino
다시 본론으로 넘어가서
그러면 favorite변수에 할당되어 있는
값을 사용하고 싶을 때는 어떻게 해야 할까요?
네!!!!!!! 🔥
의심이 들 수 있겠지만
원칙적으로 값을 총 2번 벗겨내야 합니다!
왜냐하면!
기본적인 옵셔널을 벗겨내야 하고!
벗겨낸 그 값을 사용하기 위해서는
다시 한번 또 벗겨내야 하기 때문이에요!
예시를 한번 보여드릴게요!
switch favorite {
case .some(let value): // Optional.some(let value) = Optional.some(Pizza.domino)
switch value {
case .domino:
print("도미노")
case .pizzahut:
print("피자헛")
case .pizzaalvolo:
print("피자 알볼로")
}
case .none:
print("배고프다")
}
위의 예시를 설명을 드리자면,
favorite변수를 switch문으로 처리를 하는 경우입니다!
차근차근 하나씩 설명드려볼게요!
우선 위의 예시에서
switch문이 2개가 등장합니다!
그 이유는 위에서 말씀드렸다시피
favorite변수의 값을 사용하기 위해선
값을 2번 벗겨내야 하기 때문이라고 말씀드렸죠?
그러면 쉬운 이해를 위해서
위의 예시를 하나씩 뜯어서
첫 번째 switch문에 존재하는
some과 none 부분부터 알아볼게요!
switch favorite {
case .some(let value): // Optional.some(let value) = Optional.some(Pizza.domino)
case .none:
print("배고프다")
}
favorite변수가 옵셔널 열거형으로 구현이 되어있어서
some case의 연관값 부분에
Pizza 열거형의 case가 들어간다고 말씀을 드렸습니다!
그리고 위의 예시에서는
그 연관값을 뽑아내기 위해서
let value로 바인딩을 해주는 모습이죠!
즉, 바인딩을 풀네임으로 풀어보자면
⭐️ Optional.some(let value) = Optional.some(Pizza.domino) ⭐️
이런 식으로 존재합니다!
그래서 let value에 Pizza.domino가 바인딩이 되는 것이죠!
위의 예시와 설명을 들으니까
바인딩으로 연관값을 꺼냈구나! 를
아실 수 있으십니다!
그다음 none case는 nil과 같다고 말씀을 드렸습니다!
즉, 값이 존재하지 않는다면
none case를 만나서
해당 명령을 실행을 하는 것입니다!
자! 그러면
두 번째 switch문에 대해 알아볼게요!
switch value {
case .domino:
print("도미노")
case .pizzahut:
print("피자헛")
case .pizzaalvolo:
print("피자 알볼로")
}
위에서 벗겨낸 value상수를 switch문으로
처리를 하는 것인데,
value상수에는 Pizza.domino가 저장이 되어있습니다!
그래서 .domino를 만나서
해당 명령을 실행을 합니다!
위와 같은 설명을 들으니까
두 번 벗겨내는 행위와
열거형 case 패턴에 대해서 감이 조금 오시나요?
위의 내용을 쉽게 정리를 해보자면,
⭐️ 1번 ⭐️
열거형 case 패턴은
구체적인 정보를 꺼내서 활용하기 위해
바인딩을 해서 사용하는 패턴이라고 설명을 드렸고,
⭐️ 2번 ⭐️
위의 예시는 옵셔널 열거형으로 구현이 되어있기에
총 2번을 벗겨내서 해당 값을 사용해야 하고,
옵셔널은 열거형으로 구현이 되어있는데
위의 예시에서
열거형이 옵셔널로 선언이 되어있으니
옵셔널의 some case의 연관값 부분에
열거형의 case들이 들어간다고 설명드렸습니다!
⭐️ 3번 ⭐️
그래서 그 연관값을 꺼내기 위해서
열거형 case 패턴을 사용을 하였습니다!
그리고 추가적인 내용을 전달하자면,
원래라면 원칙적으로 두 번을 벗겨서 사용을 해야 하지만
swtich문에서 옵셔널 열거형 타입을 사용할 때,
두 번 벗기지 않아도
연관값에 접근 가능하도록
편의적인 기능을 제공합니다!!!!!
정말 고맙습니다.. 🥹
스위프트ㅇ으ㅡ으....
바로 알아볼게요!!
switch favorite {
case .domino:
print("도미노")
case .pizzahut:
print("피자헛")
case .pizzaalvolo:
print("피자 알볼로")
case .nil:
print("피자가 없다")
}
이런 식으로!!!
nil을 포함한 처리로 편의적 기능을 제공합니다!
아예 연관값 자체를 case에 매칭을 시킨다면!
두 번 벗기지 않아도,
바로 해당 연관값에 접근을 할 수 있습니다!!!!!!
얼마나 간단해요!
위에서 두 번 벗기네.. 뭐네..
이런 것보다
훠어어어얼씬 간단하죠?
그런데, 위의 내용을 배운 이유는
일단 원칙적인 방법을 알아야
편의적인 방법이 이렇게 생겨난 거구나! 를
알 수 있고,
행여나 편의적인 방법이 생각이 나지 않을 때,
위에서 배운 원칙적인 방법을 사용하시면 되기에
위의 내용을 말씀드렸습니다!
그리고 옵셔널 열거형이 아니고,
그냥 연관값이 존재하는 경우에
열거형 case 패턴을 사용하는 방법은
저희가 오늘 배운 내용을 응용해서
사용하시면 됩니다!
간단한 예제를 하나 들어드릴게요!
gryffindor변수에는 name: "론", spell: "윙가르디움 레비오우사"가 들어있고
switch문에서 세 번째 case를 만나서,
name과 spell의 연관값을 바인딩을 해서
출력을 한 예시입니다!
이렇게 출력이 됩니다!
쉽죠?
구체적인 연관값을 꺼내서
그 연관값을 이용한 예시입니다!
마지막으로
열거형 case 패턴을
switch문뿐만 아니라
필요한 경우에
조건문, 반복문에서 사용하는 방법을 말씀드릴게요!
왜 조건문과 반복문을 사용하느냐?
일반적으로 switch문을 사용한다면서
왜 쓰는지 모르겠다!라고 생각하실 수 있습니다!
그런데, 다뤄야 할 케이스가 한 개 면요?? 🙄
값 하나를 사용하기 위해서 switch문 전체를 다 써야 하는 불편함을 누가 감수하죠.. ㅠㅠ
게다가 반복을 해야 하는 경우에는 어떻게 해야 할까요??
그런 경우를 위해
이 내용을 배우는 겁니다!!
너무 걱정하지 마세요!
위의 내용을 알았으니, 이 내용은
쉽게! 이해할 수 있을 겁니다!
바로 예시를 하나 들어보도록 하겠습니다!
저는 한 가지 값만 다루고 싶은데..
값을 다룰 때마다
길고 긴~~~~~~~~
switch문을 계속 써야 한다고...?
진짜 악몽입니다.. 😭
너무 불편하죠..
그럴 때 필요한 게 바로!
조건문과 반복문입니다!
역시 글로만 보는 것보다 바로 예시를 하나 보시는 게 좋으시겠죠?
위의 예시처럼
특정 케이스만 다루고 싶을 경우에는
if문을 사용하셔도 됩니다!
사용법은 매우 간단합니다!
if문을 선언을 할 때 if 바로 옆에
다루고 싶은 특정 케이스를 넣어주면 끝입니다!
그래서 위의 예시에서
if case .ron(name: let a, spell: let b) = gryffindor
ron case의 name과 spell이 let a와 b에 바인딩이 된다면
밑의 print함수를 실행시키는 조건문을 만들어 보았습니다!
그리고 당연하게
if문 같은 경우 추가적인 조건을 넣을 수 있죠!
spell 부분
즉, 바인딩을 하는 let b에
"스투페파이"가 존재한다면
print함수를 실행시키는 if문을 만든 겁니다!
그러면 이제 반복문을 볼까요?
반복문도 조건문과 같이
for 바로 옆에 다루고 싶은 case를 넣어주면 됩니다!
위에서 선언한 HarryPotter 열거형을 배열로 만들어 보았습니다!
그 아래에 for문을 이용해서
배열을 하나하나씩 case에 던져주는 겁니다!
그런데, 어떤 경우에 매칭이 될까요?
당연히! 위에서 선언한 그대로
harry case 일 경우에만 매칭이 되는 겁니다!
다른 case의 경우에는
매칭이 되질 않는 겁니다!
그래서 위의 반복문을 출력을 해본다면
이렇게 출력이 되겠죠??
매우 간단합니다!!
그리고 반복문의 다른 특이한 예시를 하나 알려드릴게요!
정말 마지막이에요!!
조금만 힘 내주세요..! 🥹
배열을 옵셔널 타입으로 선언을 했을 때
some case만 다루기 위한
열거형 case 패턴을 알려드릴게요!
배열이 옵셔널로 선언이 되어있으니,
그 배열 안에는 nil이 들어갈 수 있고, 일반 정수도 들어갈 수 있습니다!
그런데 for문을 통해서
some인 case만 반복 출력을 하고 싶은 코드입니다!
즉, let number로 바인딩이 되는 값만 반복해서 출력을 하겠다!
nil은 버리겠다!라는 의미입니다
정말 긴 글이었습니다..
보시느라 수고하셨습니다!
이 글을 통해서 많은 내용을 이해하셨으면 좋겠습니다!
저도 이 글을 정리하면서
강의 내용을 수십 번 반복하고 연습하면서
외우고, 치고, 말하면서 까지 공부했습니다! 🔥
이 글이 많은 도움이 되셨으면 좋겠습니다! 😁
오늘 준비한 글은 여기까지 입니다!
다음 포스팅에서는
⭐️ 옵셔널 패턴 ⭐️
관한 이야기를 해보겠습니다!
감사합니다!
피드백 언제나 환영입니다!
'Swift' 카테고리의 다른 글
클래스(Class)와 구조체(Struct)의 특징과 차이점 정복하기 - 1장 (0) | 2022.06.23 |
---|---|
열거형(Enumeration) 정복하기 - 4장 (0) | 2022.06.02 |
열거형(Enumeration) 정복하기 - 2장 (0) | 2022.05.30 |
열거형(Enumeration) 정복하기 - 1장 (0) | 2022.05.27 |
옵셔널(Optiona) 정복하기 - 5장 (0) | 2022.05.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- optional
- swift struct
- Instance Methods
- Optional pattern
- 클래스 구조체 차이
- Property Observers
- 옵셔널 패턴
- Type Methods
- 저장 타입 프로퍼티
- 원시값
- 옵셔널 바인딩
- 열거형 case 패턴
- 스위프트
- Swift Methods
- enum
- optional unwrapping
- 속성 감시자
- 서브스크립트
- swift class
- 옵셔널 추출
- SWiFT
- Swift enum
- optional unwrapped
- 연관값
- 옵셔널
- 스위프트 메서드
- Swift Instance
- 프로퍼티 옵저버
- 저장 타입 속성
- 열거형