본문 바로가기
[ Program ]/c#스터디

38.const/enum/struct

by 관이119 2021. 10. 9.

여러값을 하나의 형태로 묶어서 사용하고 싶을때 사용할수 있는 enum 이라는 것이 있다.

msdn에 찾아보면 다음과 같이 정의 되어있다.

 

열거형 형식은 명명 된 상수 집합을 선언 하는 고유한 값 형식 (값 형식)입니다.

 

상수는 우리가 배우지 않았는데 변수의 반대개념이라고 생각하면 된다.

한번 정의해 놓고 프로그램내에서 계속 사용할때 해당값을 변수에 담지 않고 상수로 선언해주고 사용할수 있다.

그림1

 

그림1에서 보면  상수와 변수의 차이를 알수 있다.

c# 에서는 상수를 사용할때 const 나 readonly 를 사용할수 있는데  const는 컴파일 타임상수 이고 readonly 는 런타임 상수이다.

즉 const 는 처음 빌드할때 만들어져서 값이 변하지 않는채로 고정되고 고정할수도 없다.

member_name1 을 보면 생성자나 버튼클릭시 값을 변경하려고 대입해봤지만 모두 빨간색으로 오류가 뜨며 빌드가 되지않는다.

반면 readonly 는 실제 프로그램이 실행될때 최초에 값이 정해지고 그 이후에 값이 바뀌지 않는다.

member_name2 를 보면 생성자에서 다른값으로 변경했는데 해당값은 정상적으로 컴파일이 되고 버튼클릭시 값을 변경하는것은 컴파일 오류가 발생한다는것을 알수 있다.

상대적으로 유연한 상수라고 생각하면 되겠다.

 

그림2

 

그림2를 보면 또 두가지의 차이점이 나오는데 현재시간이나 날짜를 상수로 사용하고싶을경우 const로는 정의할수가없다.

하지만 readonly 를 쓴다면 생성자에서 해당날짜를 정의 해주고 사용할수 있다.

이런유연성들 때문에 여러책을 읽어보고 여기저기 글들을 찾아보면 c# 에서는 대체로 const 대신 readonly 를 사용하라고 되어있다.

 

이정도면 상수의 개념을 알았을거같으니 다시 enum 으로 넘어가자.

enum 의 정의는 위에서 말한것처럼 상수의 집합이다.

 

기본작성형태는 다음과 같다.

enum 이름

{

   값1, 값2,값3 .....

}

 

 

그림3

 

그림3에서처럼 enum 을 정의해주고 사용할때 객체화 시켜버리면 컴파일은 되지만 위처럼 메세지가 뜬다.

결국 enum 은 까볼수는 없지만 내부적으로는 맴버필드만 가지는 클래스처럼 정의되어있다는것을 알수있다.

구지 필요없다는 값을 할당할 필요는 없으니 실제 사용할때는  studymember smem; 처럼 정의만 해줘도 된다.

studymember smem; 과 같이 정의 해주면 해당 enum 의 첫번째값이 자동으로 할당된다.

즉 studymember smem; 으로 정의하면 위 경우는 smem = studymember.맴버1; 까지 자동으로 코딩된것과 같다는 의미이다.

그림4

 

그림5

 

 

그림4와 그림5를 보면 간단한 사용예제를 확인할수 있다.

각버튼을 눌러 맴버를 변경하고 그맴버의 신상정보를 출력하는 프로그램이다.

 

다음으로 struct 를 알아보자.

struct 는 클래스와 거의 동일하다고 생각하면 된다.

형태도 클래스와 완전히 동일하다.

여기저기 찾아보면 왜써야 하는지 구구절절 분석해놓은 글들이 많이 있는데 사실 내가 생각하기에는 struct 는 필요가 없다.

단하나 c++ 등과 연동할때 c++에서 구조체로 넘기면 해당 값으로 받아야하기때문에 그때나 사용하지 평소 프로그램 하면서는 쓸필요가 없다는게 개인적인 의견이다.

 

기본적인 사용법등은 다음경로에서 확인해보자.

https://www.csharpstudy.com/CSharp/CSharp-struct.aspx

 

C# 구조체 - C# 프로그래밍 배우기 (Learn C# Programming)

Value Type vs Reference Type C#은 Value Type과 Reference Type을 지원한다. C#에서는 struct를 사용하면 Value Type을 만들고, class 를 사용하면 Reference Type을 만든다. C# .NET의 기본 데이타형들은 struct로 정의되어 있

www.csharpstudy.com

 

 

 

***숙제 :  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

댓글