티스토리 뷰

반응형

 

 


Protocol
CaseIterable

enum 열거형의 값들을 배열 컬렉션과 같이 순회할 수 있도록 해주는 프로토콜이 있습니다. 바로 CaseIterable이라는 프로토콜입니다. 

CaseIterable 프로토콜은 모든 case 값들에 대한 컬렉션을 제공하는 타입입니다.

enum 타입에 CaseIterable 프로토콜을 채택해서 enum의 case 값들을 for in loop나 forEach 등으로 순회할 수 있습니다. 그 외 배열 컬렉션에서 사용하던 다양한 메서드 또한 사용 가능합니다. 

 

 


Declaration
CaseIterable 선언방식

CaseIterable은 앞서 말했듯이, 프로토콜로 선언되어있습니다. 

 

 


CaseIterable 프로토콜과 allCases 타입 프로퍼티

enum 열거형으로 선언되어있는 CompassDirection은 CaseIterable 프로토콜을 채택하고 있습니다. 그렇기에, CompassDirection이 갖고 있는 case들을 배열과 같이 순회할 수 있게 됩니다. 이 때 배열처럼 사용하기 위해 열거형의 타입 프로퍼티인 allCases를 사용할 수 있습니다. 

그 외에도 allCases 타입 프로퍼티를 통해 기존 배열에서 사용할 수 있던, map / compactMap / reduce / joined 등 다양한 고차함수 사용도 가능하며, count / isEmpty 등의 프로퍼티도 사용이 가능합니다. 

위의 코드를 보면, 현재 case의 갯수를 count을 통해 출력하고, CompassDirection의 타입 프로퍼티인 allCases를 통해서 전체 case 값을 배열처럼 다루고 있습니다. 각각의 case를 문자열로 변환 후에 ", " 단위로 합친 후, caseList에 저장하고 있습니다. 

 


CaseIterable 프로토콜 채택해서 사용하기

CaseIterable의 채택 사용방법은 매우 간편합니다. CaseIterable을 열거형 타입에 채택해서 사용할 때 별도로 구현해야할 관련 값이나 각  case들에 대한 @available 속성이 없기 때문입니다. 

타입 프로퍼티로 제공되는 allCases는 enum 열거형 타입에서 case문이 정의한 순서대로 구성되어있는 컬렉션을 사용할 수 있도록 제공합니다. 

앞서 보았던 CompassDirection 열거형 타입의 CaseIterable 사용 사례 처럼, 열거형에 CaseIterable 프로토콜을 채택해서 열거형의 case문들을 배열 컬렉션과 같이 다룰 수 있는 장점을 얻을 수 있습니다. 

열거형 타입을 정말 배열과 같이 다룰 수 있게 되는지를 playground에서 직접 코드로 구현해보겠습니다.

 


CaseIterable, enum 열거형 타입에 실제 사용해보기

위의 Animal은 몇몇 동물 케이스를 갖고 있는 enum 열거형 타입으로 지정되어 있습니다. CaseIterable 프로토콜을 채택해서 내부의 5개 동물을 배열과 같이 다룰 수 있는지 확인해 보겠습니다.

enum의 세부타입을 지정하고, rawValue를 줄 수도 있습니다. 이 또한 CaseIterable을 활용해서 배열처럼 접근 할때, 각 배열 원소의 .rawValue 프로퍼티를 통해 각 case의 값들을 접근할 수 있습니다. 

 

 

 

Animal enum 열거형은 앞서 CaseIterable 프로토콜을 채택해 주었죠? 이후에 별도의 추가 구현사항은 없었습니다. 

위의 코드는 Animal 열거형 타입의 타입 프로퍼티로 allCases를 접근해서 배열과 같이 사용하고 있는 것을 볼 수 있습니다. 배열과 같이 forEach를 통해 값을 순회하거나, count를 통해 case 갯수를 얻거나, map / reduce / joined 등의 고차함수로 배열과 유사한 처리를 할 수 있는 것을 볼 수 있습니다. 

위 코드의 출력 결과가 예상이 가시나요? 그 결과는 아래의 콘솔 결과를 보시면 되겠습니다. 👩🏻‍💻

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함