여러값을 하나의 형태로 묶어서 사용하고 싶을때 사용할수 있는 enum 이라는 것이 있다.
msdn에 찾아보면 다음과 같이 정의 되어있다.
열거형 형식은 명명 된 상수 집합을 선언 하는 고유한 값 형식 (값 형식)입니다.
상수는 우리가 배우지 않았는데 변수의 반대개념이라고 생각하면 된다.
한번 정의해 놓고 프로그램내에서 계속 사용할때 해당값을 변수에 담지 않고 상수로 선언해주고 사용할수 있다.
그림1에서 보면 상수와 변수의 차이를 알수 있다.
c# 에서는 상수를 사용할때 const 나 readonly 를 사용할수 있는데 const는 컴파일 타임상수 이고 readonly 는 런타임 상수이다.
즉 const 는 처음 빌드할때 만들어져서 값이 변하지 않는채로 고정되고 고정할수도 없다.
member_name1 을 보면 생성자나 버튼클릭시 값을 변경하려고 대입해봤지만 모두 빨간색으로 오류가 뜨며 빌드가 되지않는다.
반면 readonly 는 실제 프로그램이 실행될때 최초에 값이 정해지고 그 이후에 값이 바뀌지 않는다.
member_name2 를 보면 생성자에서 다른값으로 변경했는데 해당값은 정상적으로 컴파일이 되고 버튼클릭시 값을 변경하는것은 컴파일 오류가 발생한다는것을 알수 있다.
상대적으로 유연한 상수라고 생각하면 되겠다.
그림2를 보면 또 두가지의 차이점이 나오는데 현재시간이나 날짜를 상수로 사용하고싶을경우 const로는 정의할수가없다.
하지만 readonly 를 쓴다면 생성자에서 해당날짜를 정의 해주고 사용할수 있다.
이런유연성들 때문에 여러책을 읽어보고 여기저기 글들을 찾아보면 c# 에서는 대체로 const 대신 readonly 를 사용하라고 되어있다.
이정도면 상수의 개념을 알았을거같으니 다시 enum 으로 넘어가자.
enum 의 정의는 위에서 말한것처럼 상수의 집합이다.
기본작성형태는 다음과 같다.
enum 이름
{
값1, 값2,값3 .....
}
그림3에서처럼 enum 을 정의해주고 사용할때 객체화 시켜버리면 컴파일은 되지만 위처럼 메세지가 뜬다.
결국 enum 은 까볼수는 없지만 내부적으로는 맴버필드만 가지는 클래스처럼 정의되어있다는것을 알수있다.
구지 필요없다는 값을 할당할 필요는 없으니 실제 사용할때는 studymember smem; 처럼 정의만 해줘도 된다.
studymember smem; 과 같이 정의 해주면 해당 enum 의 첫번째값이 자동으로 할당된다.
즉 studymember smem; 으로 정의하면 위 경우는 smem = studymember.맴버1; 까지 자동으로 코딩된것과 같다는 의미이다.
그림4와 그림5를 보면 간단한 사용예제를 확인할수 있다.
각버튼을 눌러 맴버를 변경하고 그맴버의 신상정보를 출력하는 프로그램이다.
다음으로 struct 를 알아보자.
struct 는 클래스와 거의 동일하다고 생각하면 된다.
형태도 클래스와 완전히 동일하다.
여기저기 찾아보면 왜써야 하는지 구구절절 분석해놓은 글들이 많이 있는데 사실 내가 생각하기에는 struct 는 필요가 없다.
단하나 c++ 등과 연동할때 c++에서 구조체로 넘기면 해당 값으로 받아야하기때문에 그때나 사용하지 평소 프로그램 하면서는 쓸필요가 없다는게 개인적인 의견이다.
기본적인 사용법등은 다음경로에서 확인해보자.
https://www.csharpstudy.com/CSharp/CSharp-struct.aspx
***숙제 : enum 을 사용하는 간단한 프로그램을 자유롭게 만들어보자.
'[ Program ] > c#스터디' 카테고리의 다른 글
40.using/garbage collection (0) | 2021.10.09 |
---|---|
39.property(속성) (0) | 2021.10.09 |
37.DateTime,static (0) | 2021.10.09 |
36.클래스(전역변수/지역변수), 실제사용법 (0) | 2021.10.09 |
35.클래스(생성자오버로딩) (0) | 2021.10.09 |
댓글