본문 바로가기
Swift

열거형에 관하여

by iOS 개린이 2023. 2. 15.

열거형에 대해서 알고는 있지만 프로젝트를 할 때, 열거형을 자주 사용하지 않기 때문에 개념을 정리해보고자 한다.

 

열거형(Enumeration)

-연관된 항목들을 묶어서 표현할 수 있는 타입이다.

-배열이나 딕셔너리는 내부 요소를 추가하거나 수정할 수 있지만,

열거형은 프로그래머가 정의한 항목 외에는 추가나 수정이 불가능하다.

-이미 정해놓은 값만 사용하기 때문에 코드를 작성할 때, 오타낼 가능성을 줄여주어 안정성이 향상된다.

-Value(값)타입으로 stack 영역에 저장된다. (성능이 좋다.)

 

-열거형이 사용되면 좋은 상황

1. 제한된 선택지를 주고 싶을 때 

2. 정해진 값 외에는 입력받고 싶지 않을 때

3. 예상된 입력 값이 한정되어 있을 때

 

 

 

 

열거형의 사용

 

-enum 키워드를 사용하여 선언한다.

 

위의 항목들은 case로 선언하고, 값(원시값)을 넣어주지 않았다.

C언어나 Objective-C에서는 열거형이 생성될 때, 각 case별로 암시적인 정수값(ex) 0, 1, 2, 3)을 할당해주었는데,

Swift의 열거형에서는 원시값이 없으면 각 항목이 그 자체로 고유의 값이 될 수 있다.

 

ex) 

.을 통해 항목에 접근할 수 있고, 항목이 그 자체가 고유의 값이 된다.

 

 

 

열거형의 원시값

-앞에서 보여준 코드들은 모두 원시값이 없는 열거형으로 그 자체로 고유값을 가진다고 했음.

이제 원시값이 있는 형태의 열거형을 알아보자. (특정 타입으로 지정된 값.)

 

ex) 원시값이 있는 열거형

 

코드를 보면 항목에 값이 들어가있는데 이것이 바로 원시값이다.

원시값이 있는 열거형을 사용하려면, 반드시 enum 선언 이름 옆에 타입을 명시해주어야 한다.

 

원시값에 접근하려면 항목을 선언하고 .rawValue 프로퍼티를 통해 접근할 수 있다.

 

ex) 

각각 "고등", "중등" 을 찍어준다.

 

항목에 원시값을 줄 수 있고, 원시값은 rawValue로 .을 통해 사용할 수 있다.

예에서는 String으로 원시값을 설정했는데, 원시값으로 올 수 있는 타입들은 

1. Number 타입

1. Character 타입

1. String 타입이 있다.

 

원시값이 있는 열거형에서 내가 일부 항목에만 원시값을 주고 싶다면?

-가능함. 원시값을 주지 않은 항목들은 스위프트가 알아서 값을 할당해준다.

 

ex) Number 타입 열거형에서 일부 항목만 값을 줄 때

 

정수 타입으로 원시값을 일부 항목에만 넣었는데, 원시값을 받지 못한 녀석들은 첫 항목을 기준으로 0부터 1씩 늘어난 값을 갖게 된다.

 

 

그럼 정수형이 아닌 Double이나 Float타입을 사용했을 때도 자동으로 1씩 늘어난 값을 할당해주나?

 

바로 에러를 뱉는다. 이유는 Number 타입에서는 원시값이 없을 때, 첫 항목을 기준으로 1씩 늘어난 값을 받는다고 했다.

근데 1은 정수값이고 우리의 타입은 실수값이여서 더할 수가 없기 때문에 에러가 발생하는 것.

 

 

Number 타입 말고 Character나 String타입을 사용했을 때는?

 

ex) Character타입

 

Character타입에서도 자동 할당은 불가능하다. 실수형과 동일한 맥락으로 +1 정수값과 더해질 수 있는 값이 자동으로 할당된다. 

따라서 Character타입은 모두 원시값을 넣어주세요.

 

 

ex) String타입

 

String 타입에서는 에러가 발생하지 않고, 값을 자동으로 넣어줌. 

하지만 Number 타입과는 다르게 정수값을 넣어주지 않고, 항목 이름과 동일한 원시값을 자동으로 넣어준다.

 

 

high 항목 이름과 동일하게 원시값을 설정해줌.

 

 

원시값을 통한 열거형 선언

-우리가 원시값을 알고있을 때, 원시값을 통해 열거형 변수나, 상수를 생성해줄 수 있다.

 

 

위와 같이 student1과 student2는 원시값을 통해 열거형 타입을 선언해줄 수 있고, 

student3와 같이 틀린 원시값을 넣어주면 nil을 반환함.

 

 

 

 

Reference:

야곰 - 스위프트 프로그래밍 3판

https://babbab2.tistory.com/116

 

 

'Swift' 카테고리의 다른 글

연산자 정리  (0) 2023.02.28
열거형에 관하여 2  (0) 2023.02.17
함수와 메소드의 차이  (0) 2023.02.06
Static과 Class에 관하여  (0) 2023.01.31
오버로딩(Overloading)에 관하여  (0) 2023.01.30