열거형(Enumeration Type)

킴스코딩클럽·2022년 9월 20일
1

CS기초 시리즈

목록 보기
11/71

유한한 집합을 표현하기 위한 방식
새로운 타입을 정의해 정의한 타입으로 다른 타입들처럼 변수를 선언해 사용할 수 있다


롤의 데미지 구조를 코드로 표현해보자

switch ~case를 이용

switch(attackType)
{
	case 0; 
		물리 공격
		break;

	case 1;
		마법 공격
		break;

	case 2;
		고정뎀
		break;
}
// 이 방식의 문제점 각 타입이 0,1,2로 표현되 사용 시 직관성이 떨어짐

상수를 사용해 보기 좋게 만들어보기

const int AP = 0, AD =1,TrueDamage=2;

switch(attackType)
{
	case AP; 
		물리 공격
		break;

	case AD;
		마법 공격
		break;

	case TrueDamage;
		고정뎀
		break;
}

하지만 이 방식도 숫자가 들어가 다른 사람과 공동 작업 시 어려움이 있을수도 있음


이 같은 상황에서 사용하기 좋은 열거형식 방식

enum 새로운 형식의 타입 
{
	원소1,
    원소2,
    원소3,
    ....
};
새로운 형식의 타입 변수명;
enum AttackType
	{
		attackPower=0,
		attackDamage=1,
		TrueDamage=2
	};

열거형을 사용한 모습

	switch (AttackType)
	{
		case attackPower:
			break;
		case attackDamage:
			break;
		case TrueDamage:
			break;
		default:
			break;
	}
// attackPower=0, attackDamage=1,TreuDamage=2가 됨
//visual studio에서는 type을 치면 자동생성됨

복잡한 색삭 표현도 간단하게!

enum Color 
{
RED = 0x~;
BLUE = 0x~;
....
}

열거형의 특성

  • 열거형은 숫자를 영어 단어로 바꾼 것이다
  • 어려우면 코드를 의미 직관적이지 않은 숫자가 아니라 영어 단어로 표현할 수 있도록 도와주는 기능
  • 열거형은 새로운 타입을 생성해 내는 것이다
  • 예를 들어 int형은 정수라면 만들어진 attackType은 attackPower 등의 3가지가 들어가게 되는 것
  • 열거형은 명시적형태변환을 사용해 정수로 변환하거나 정수형에서 명시적으로 열거형으로 변환가능
  • 열거형은 변환가능하기 때문에 attackType에서 4를 써넣으면 컴파일러가 자동변환해서 문제없이 작동하지만 프로그밍적인 의미는 전혀 없다.

정리

  • 열거형은 새로운 타입을 생성해 낸다
  • 각 원소는 그 타입에 대한 리터럴로 작동
  • 위와 연결되어 리터럴이므로 당연히 상수 이다
profile
공부 기록용

0개의 댓글