프로그래밍 언어 - Ordinal Data Type
프로그래밍 언어 - Ordinal Data Type
💫 사용자 정의 순서 타입
💫 순서 타입 - Ordinal type
- 가능한 값들의 범위가 양의 정수 집합과 연계되는 타입
기본 순서 타입 - Java의 integer, char 혹은 C의 int, short, char
- 사용자-정의 순서 타입
- 열거
- 부분 범위
→ 사용하면 코드가 간결해지고 가독성이 좋아진다.
💫 열거 타입 - Enumeration Type
- 열거 상수(enumeration constants)들의 모임을 정의하고 그룹핑한 타입
- C#, Enum
- 열거 상수에는 전형적으로 정수 값 0, 1, … 등이 암묵적으로 할당되나 임의의 값을 명시적으로 할당하는 것도 가능
🫧 설계 고려사항
열거형이 정수형으로 강제 형변환 가능한가?
열거형과 정수이외의 타입과의 관계를 허용할 것인가?
- 열거 타입이 제공되지 않는 언어에서는 정수를 이용하여 열거형을 흉내냄
1
2
3
4
5
6
7
#define MALE 0
#define FEMALE 1
// or
int const MALE = 0;
int const FEMALE = 1;
if (gender == MALE) // ~
- 열거 타입을 이용하면 새로운 타입을 정의하게 되고 가독성을 향상시킨다.
1
2
3
4
5
6
7
enum Gender
{
MALE = 0,
FEMALE = 1
};
if (gender == MALE) // ~
@ C, Pascal은 열거형을 처음으로 도입하여 널리 쓰인 언어
@ C는 열거 타입 enum을 기본 타입으로 제공
- 열거 타입을 제공하는 대부분의 언어에서 정수 타입과의 형변환은 허용하지 않음
- 열거 타입은 열거 타입이지 정수형은 아님, 단 열거형의 값을 정수형으로 참조는 가능
- C++, Java, Python, …
- 반면 C에서는 허용
- i.e.
gender++, gender = 0;
- i.e.
- Java, Java 5.0(2004)에 java.lang.Enum 기본 타입으로 제공
- 모든 열거 타입은 묵시적으로 java.lang.Enum에 상속을 받음 (정수형 X)
- 따라서 toString, ordinal, values 등 몇몇 메소드들을 사용 가능
- 흥미롭게도 스크립트 언어 중 열거 타입을 기본 타입으로 지원하는 것은 없음
- 표준 라이브러리에 제공
- JavaScript, Python, Ruby, Lua, PHP, …
🫧 평가
열거형은 가독성과 신뢰성을 향상시킨다.
열거형은 산술연산을 허용하지 않고(열거형은 정수형이 아님), 정의된 범위 밖의 값을 할당 받을 수 없기 때문에.
C, 열거형을 정수형처럼 취급, 이는 가독성을 향상시키지만 신뢰성 문제를 야기할 수 있다.
C++, 열겨형 비교연산 시 정수형 타입처럼 다뤄 질 수 있다.
💫 부분 범위 타입
- 순서 타입의 연속된 부분 순서열(subsequence)
- 예) 12..14
가독성과 신뢰성을 향상시지만, 대부분 언어에서 차용하지 않음.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.