//기본 데이터형//
- C#의 데이터형 object로 부터 파생된 객체
System.Object == object
* object는 객체를 생성하기 위한 클래스와 같다 *
- 데이터형은 CTS에서 정의된 객체
*CTS : 닷넷 호환언어가 지켜야할 타입의 표준규격을 말한다.
<데이터형>
* 문자열형(string)이 배열이나 포인터로 되어 있지 않다. *
<string 형>
- C/C++에서는 문자열 끝에 0,'\0'(NULL)을 작성 해주었다.
- ' + ' : 문자열 연결, ' == ' : 문자열 비교, '[인덱스]' : 문자
(예) string str2 = "Hello_" + "word"; //[출력 ] Hello_word
- 문자열에 ' \ '이 포함하는 경우,(예) @"C:\temp\test.txt" -> "C:\temp\test.txt"로 출력된다.
- 문자열의 문자 개수를 Lenght로 출력할수 있다.
(예) string str1 = "Hello Word";
Console.WriteLine(str1.Length); //[출력] 12
<bool 형>
- true와 false 대신 0과 그 외의 값은 사용 할수 없다.
- bool형으로 선언을 하면 디폴트 값은 'bool'로 되어있다.
<char 형>
- 유니코드, 2바이트
- char 형의 암시적 값 변환
char num = ' 7 ' // 문자 상수값 = 55 -> int num = 55
//int 로 출력하면 num은 55가 출력된다.
<C#의 연산자와 우선순위>
//암시적 데이터형 var//
[자료형이 정해 지지 않았을 때의 변수]
처음 대입되는 데이터에 따라 데이터 형이 결정되는 것을 var형 이라고 한다.(object와 유사하다.)
(사용할수 없는 예)
1. NULL값으로 초기화 한 경우, 매개변수로는 사용 할수 없다.
2. 지역변수로만 사용가능하고 , 클래스의 멤버(생성해서 사용해야하는 부분)에서는 사용할 수 없다.
3. 연속적으로 초기화 하는 경우, 사용할 수 없다. (예) var a=0; b=1;
<선언>
var 변수명 = 3.14f; (디폴트 값은 double형이다.)
//nullable형//
null을 허용하지 않는 데이터형이 null값을 허용하게 한다. ->"비어있는 상태가 가능하다."
<선언>
데이터형? 변수명;
(예) int? Var1;
bool? Var2 = null; //true, false, null -> null도 사용 할 수 있게 된다.
<속성>
.HasValue //true, false 값을 얻을 수 있다.
.Value // 읽기 전용(값을 출력)
(응용)
//변환//
<데이터 변환>
: ToString() _현재의 할당 받은 값을 문자열로 바꿔주는 것이다.
: 기본 데이터형.Parse(문자열)_해당 문자열 표현을 기본 데이터형에 맞게 변환 시켜준다.
<기본 데이터 형에서 제공 됨>
: Convert.ToInt32()_지정된 값을 int(정수)형로 변환
Convert.ToSingle()_지정된 값을 float형으로 변환
Convert.ToXXXXX()
<클래스에서 제공 되는 메소드>
//박싱과 언박싱//
박싱 :
- 값 형식을 참조 형식으로 변환하는 것 -> 스택에 있는 데이터가 힙으로 복사되는 것
- 데이터 형을 최상위 object형으로 변환하여 힙 메모리에 저장하는 것을 말한다.
(예) int m =123;
object obj = m; //int값의 형식을 Object라는 참조 형식으로 형변환 시킴
언박싱 :
- 참조 형식을 값 형식으로 변환 시키는 것 -> 힙에 있는 데이터가 스택으로 복사 되는 것
- 힙에 저장된 형식을 다시 원래의 형식으로 변환하는 것을 말하고, 어떤 형식으로 변환 할 것인지 캐스트 연산자(명시적 변환)를 사용해주어야한다.
- 언박싱은 박싱한 객체에 대해서만 가능하고, 박싱하기 전 형식을 준수해야한다. 즉, short타입으로 박싱을 선언했을 경우, int 으로 언박싱 하는 것을 불 가능하다.
(예) int n =(int)obj;
(예)박싱과 언박싱 과정에서 메모리 공유가 발생하는지, 또는 복사가 발생하는지 확인해보는 예시
/* 별도로 힙메모리 영역을 사용한다. 즉, 메모리를 공유 하지 않는다는 것을 볼 수 있다.*/
//표준 입력//
- Console.ReadKey() -> 사용자가 눌린 키 한 문자 정보를 리턴하는 메소드
<함수 원형>
public static ConsoleKeyInfo ReadKey()
public static ConsoleKeyInfo ReadKey(bool intercept)
(cf.)true : 화면 출력 안함, false : 화면 출력
//하나의 함수명으로 여러개의 매개 변수를 이용한 것( 오버로딩)
- ConsoleKeyInfo -> 키의 문자와 shift, alt, ctrl 보조키 상태를 포함하고 있는 구조체이다.
* ConsoleKeyInfo.Key : 대소문자를 구분하지 않는다.*
* ConsoleKeyInfo.KeyChar : 눌린 키의 유니코드를 얻는 속성으로 대소문자 등을 모두 구분할 수있다.*
- Console.ReadLine() -> 엔터키가 눌러질 때까지 입력 받은 물자열을 리턴하는 메서드
(예)점수를 입력 받아서 평균 출력하기
//사용자 지정형//
사용자가 임의로 데이터형을 지정하는 것들을 말한다.
- struct(구조체)
<형식>
public struct 구조체명
{
//멤버, 속성, 메소드
}
*public : 구조체의 멤버들을 모두 사용할수 있도록 한다는 것을 의미한다.
<제한 사항>
- 구조체에 선언된 const, static 변수만 초기화 가능하다.
(예)구조체 안에서 const또는 static변수에 대해서만 선언동시에 초기화 했을 때
- 구조체 안에 선언할 수 있는 생성자(new)는 매개변수가 반드시 있어야한다.
(예)구조체에 생성자와 소멸자를 명시하고 new로 생성했을 때와 일반선언 했을 떄의 초기화
- 구조체를 같은 구조체에 대입하게 되면 값이 복사된다.
(예)
(예2)
" Console.WriteLine("", TestStruct1.Age); "를 TestStruct2를 1에 넣어주기 전에 작성하면 다음과 같이 오류가 발생한다.
왜냐하면, 아직 TestStruct1은 초기화가 되어 있지 않기 때문이다. 오류를 없애주기 위해서는 그 위에 "TestStruct1.Age =0;" 이라고 적어주면 다음과 같은 오류가 사라지고 다음과 같이 출력 할수 있다.
+ new를 사용하여 변수를 사용 했을 경우, 기본 생성자에 의해서 디폴트 값이 자동으로 출력되어 오류가 발생하지 않는다.
- 구조체는 값 형식이고 클래스는 참조 (별명)형식이다.
(예)구조체 형식
-> test2에 24를 넣어 값을 변화 시켰기 때문에 참조 형식이였다면 test1의 값도 같이 변화 해야하지만 변화하지 않은 것을 보아 구조체는 값형식이라는 것을 알수 있다.
(예2) 참조 형식
-> test4는 test3의 별명과 같은 것이다. 그래서 test4가 변했을 때, test3도 변화하는 것을 알수 있다.
- 구조체는 값 형식이므로 선언만으로도 사용가능 하다.
* new를 사용했을 때만 ->생성자가 호출되고 ->기본 값으로 초기화 된다. *
- 구조체는 구조체 또는 클래스에 상속 할수 없다.
-구조체는 인터페이스를 상속하여 메서드를 구현 할 수 있다.
*인터페이스 : 여러사람의 메서드들을 통일 시킬수 있다.*
//열거형//
- 상수를 문자열로 대치하여 선언하고 상수에 의미를 부여한 것이다.
<형식>
enum 열거형 명칭 { 문자열1, 문자열2};
enum 열거형 명칭 ;
enum 열거형 명칭 ;
- 기본은 int형이지만 char형을 제외한 형식을 지정할 수 있다.
enum Days : byte;
-열거형 변수가 아닌 변수에 열거형 값을 대입할 때는 (캐스트 연산자를 이용하여)데이터 형을 명시해야 한다.
(예)요일에 대한 열거형 변수를 정수형 변수에 대입하여 출력하기
* ' : '앞에 데이터 형을 적어 원하는 타입의 데이터형으로 사용가능하다.*
*디폴트 값은 int형이다*
//값 형식과 참조 형식//
값 형식 :
- System.object
+ System.ValueType에서 파생됨
- 변수가 직접 값을 저장하는 형
- 기본 데이터형, 구조체, 열거형
- 선언 vs 생성(new)
(예)일반적 선언과 new를 통해 생성한 객체에 대한 초기값 출력하기
int nVal1 = 12;
int nVal2 = new int();
Console.writeLine(" ", nVal1, nVal2);
>>> 12 0
참조(별명) 형식 :
한 객체를 참조형 변수가 사용할 때, 참조형에 의해 내용이 바뀌면 객체에 영향을 준다.
(예) class, interface, delegate, 배열, string 등
객체와 참조형 사이의 대입은 객체의 메모리 주소가 복사 된다.
(예) 배열
int[] Array1 = ;
int[] RefArray; //참조형 배열 변수
RefArray = Array1;
RefArray[1] = 20;
Console.writeLine(" ", Array1[0],Array1[1], Array1[2]);
//정리//
- 기본 데이터형과 CTS형식을 익히기
- 값 형식과 참조 형식의 차이점 이해하기
이미지 출처: http://blog.daum.net/_blog/BlogTypeMain.do?blogid=0Xrxs
'PROGRAMING📚 > C#📑' 카테고리의 다른 글
C#_클래스 (0) | 2019.02.22 |
---|---|
C#_ 제어문 (0) | 2019.02.21 |
C#_연산자 (0) | 2019.02.14 |
C#_프로그래밍의 기본 구조 (0) | 2019.02.14 |
C#_닷프레임네트워크와 C#언어 (0) | 2019.02.14 |
댓글