같은 주제로 연관된 데이터들을 멤버로 구성하여 나타내는 자료형
예를 들어 유저마다 포지션을 저장해두어야 한다고 가정해보자. 그럼 String을 통해 저장할 수도 있다.
그런데 이렇게 입력 할 때마다 매번 값을 직접 넣다보면 오타가 나거나 실수할 수 있다.
(가독성 & 안정성도 떨어지겠지 ?)
그래서 , 이 처럼 공통된 주제에 대해서 이미"정해놓은 입력 값"만 선택해서 받고 싶을 때 사용하는 것이 "열거형"이다.
(Enum은 값 형식으로 Stack에 저장되어 성능면에서도 향상이 된다)
다음과 같이 열거형 이름만 쓰고 선언하는 것이 원시값이 없는 열거형이다. 이렇게 일일이 case를 쓰면서 나열해도 되고,
아래 처럼
이런 방식으로 하나의 case에 콤마를 이용해서 나열해서 써도 된다. (이게 더 편할듯)..
이렇게 작성해주면 이게 바로 원시값이 없는 열거형이다!
실제로 사용할 땐 우리가 선언한 이 열거형이 하나의 자료형이 되는 것이다.
아까 string으로 선언한 코드를 열거형으로 고쳐보자면 ....
내가 선언한 열거형을 타입처럼 사용하고 , 열거형으로 타입이 지정된 경우 위처럼 .(점문법)을 통해 내가 선언한 case에 한해서만 접근 할 수 있다.
(오타 줄고 , 코드 가독성 높아짐)
위에 case에 원시값을 지정해줄 수 있는데 , 이를 RawValue 라고 한다.
이렇게 Int 라는 타입을 enum 선언 시 이름 옆에 명시해주면 , 가장 먼저 선언된 case부터 0부터 1씩 증가된 값이 들어간다....!!!!!
여기서 만약 나는 내가 직접 RawValue를 지정해주고 싶다면,
대신 위 처럼 RawValue가 없는 case는 , 바로 이전 case의 RawValue에서 +1 된 값으로 세팅된다.(신기..🥸)
하지만 !!!!!!
만약 Int형이 아닌 자료형으로 했을 경우에 , 모든 case에 대해 값을 지정해주는 것이 아니라면 아래와 같은 에러가 발생한다.
그 이유는, Number Type의 Raw Value는 만약 값이 없으면,바로 이전 case의 Raw Value의 값에서 1이란 정수값을 더한 값을 가진다
sup의 Raw Value를 컴파일러가 지정해아 하는데, 바로 이전 case인 adc의 Raw Value가 정수값이 아닌 실수값이기 때문에 못더한다는 에러를 뱉는 것이다.
따라서 , Int형이 아닌 Number 자료형을 사용할 경우,
RawValue를 생략하고 싶다면, 바로 이전 case의 RawValue를 정수 값으로 해줘야한다 !
이렇게 사용해주면 된다 !
하지만 주의할 점은 Character Type으로 열거형을 선언할 경우,모~든 case에 대한 RawValue를 직접 선언해줘야한당
만약 하나라도 없거나 , RawValue가 겹치면 에러발생 ~
String은 Character와 달리 Raw Value를 지정하지 않으면, case 이름과 동일한 Raw Value가 자동으로 만들어진다 ~!
아주 간단하구 간편함 ㅎㅎ
그러면, 원시 값이 있는 열거형의 경우는 RawValue에 어떻게 접근할까 ?
이름그대로 rawValue란 속성을 이용해 접근하면 된다~
만약, Raw Value가 있는 열거형의 경우,
Raw Value를 통해서도 열거형을 생성할 수 있는데!!! 이땐 다음과 같은 생성자를 이용하면 됨!!
근데, 만약 없는 Raw Value 값을 대입할 수 있으니,
이때 반환되는 열거형은 옵셔널 타입임!!! (없는 Raw Value일 경우, nil 리턴)
*참고해서 작성한 글입니다.
좋은 글 감사합니다. 자주 방문할게요 :)