본문 바로가기
PROGRAMING📚/C#📑

C#_데이터형

별찌루 2019. 2. 14.
728x90
반응형

//기본 데이터형//

 

- 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]);

 
>>> 1 20 3

 

 

 

 

 

 

 

 

 

//정리//

- 기본 데이터형과 CTS형식을 익히기 

- 값 형식과 참조 형식의 차이점 이해하기 

 

 

 

이미지 출처: http://blog.daum.net/_blog/BlogTypeMain.do?blogid=0Xrxs

728x90
반응형

'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

댓글