열거형이란
- 예를들어 햄버거를 시킨다면 각 가계의 1번메뉴가 각 다르기 때문에 1번을 만들어 달라하면 다른 값이 나옵니다. 그래서 1,2,3, 이러는것보다 버거킹의 치즈버거를 만들어달라 라는식으로 만드는 것이 좋다
- 숫자 배열 자료형에 내가 별명을 붙여서 만드는 자료형 느낌이라 보면 됩니다
- 열거형은 클래스 외부에 선언하길 권장
열거형 선언방법
enum 이름
{
별명들 입력 ex) Idel, Walk, Attack ...
}
- 열거형의 각 요소는 첫번째부터 순서대로 0부터 시작하며 값을 수정할 수 있다
enum Color
{
Red,Green,Yellow,Blue=100
//blue는 100으로 설정
// 0, 1, 2, 100 순으로 출력됨
}
열거형 형변환
- 열거형은 정수형식간에 명시적 변환이 필요하다
enum location //장소랑 관련된 곳을 '열거' 한다
{
//0부터 시작하기 때문에 =1로 선언해주면 1부터 시작할수 있음
Village=1, HuntingPlace, Shop
}
location loc;
loc = location.Village;
loc = (location)1; //형변환
Console.WriteLine((int)loc); // 1 출력됨
Console.WriteLine(loc); //빌리지 출력됨
IsDefined
- enum에서 isdefined 메서드는 특정 정수값 또는 문자열 이름이 해당 열거형에 정의된 유효한 멤버인지 확인하는 메서드이다
- isdefined를 수행할 때 > (준비물: 타입,존재하는지 판단할 수)
if(Enum.IsDefined(typeof(location), 7)) //이즈디파인으로 정의 되어있는지 확인 가능
{
Console.WriteLine("정의가 되어있습니다");
}
else
{
Console.WriteLine("정의x");
}
유연하게 Enum 사용하는 방법
- 프로젝트나 개발을 하는 환경에서 enum에 정의된 값이 나중에 점점 늘어나는 경우가 있는데 이 경우 for문을 돌릴 때 매번 요소의 수를 수정하기엔 어려움이 있음
- 그럴때 End라는 요소를 마지막에 넣어둠으로서 마지막 숫자를 알아서 찾아가게 할 수 있음
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Day20
{
enum CharStates
{
Idle,Walk,Run,Jump,End //End를 넣음으로서 끝숫자를 알수있게됨
}
internal class Program
{
static void Main(string[] args)
{
for(int i = 0; i < (int)CharStates.End; i++) //반복 몇번할지 end를 씀으로서 매번 수정 안할 수있음
{
var a = (char)i;
}
}
}
}
구조체란
- 구조체란 간단히 박스속에 칸막이로 다른 데이터도 넣는 개념 ex ) 박스안에 인트 플로트 더블이 같이 있음
- 여러 자료형을 모아 하나의 자료형으로 만드는것
사용방법
struct [원하는 구조체 이름]
{
[자료형] [변수명];
}
struct Car
{
public float maxSpeed; //맴버 변수 or 필드 라 부름
public string maker;
private int carNem;
}
Car firstCar;
firstCar.maxSpeed = 12.14f;
firstCar.maker = "Honda";
// 차넘버는 프라이빗이라 수정불가능
- 구조체는 값타입으로 분류됨 클래스와 유사하지만 클래스는 참조타입임
- 기본적으로 널을 할당할 수 없고 상속도 불가
- 구조체는 기본적으로 작고 데이터 중심적인 타입을 위해 설계되었으며 , 단일 값 표현, 16바이트 미만의 작은 크기, 불변성, 박싱이 자주 일어나지 않는 이 4가지가 충족되면 구조체 설계를 고려하면 된다