본문 바로가기
Language/C#

[ C# ] 데이터형, 변환, 표준 입력형식

by 신인용 2020. 9. 1.
반응형

 

데이터형, 변환, 표준 입력형식

 

1. 데이터형

- 기본 데이터형

 C#의 데이터형 object로부터 파생된 객체

  System.Object == object

 데이터형은 CTS에서 정의된 객체

 

- 정수형

bool: System.Boolean, 1byte

char: System.Char, 2byte

byte: System.Byte, 1byte

sbyte: System.SByte, 1byte

short: System.Int16, 2byte

ushort: System.UInt16, 2byte

int: System.Int32, 4byte

uint: System.UInt32, 4byte

long: System.Int64, 8byte

ulong: System.UInt64, 8byte

 

- 실수형

float: System.Single, 4byte

double: System.Double, 8byte

decimal: System.Demical, 16byte

 

- 문자열형 -> C#에서 새로 등장.

배열, 포인터를 이용하던 것을 안하고 데이터형으로 지원함.

string: System.String

 

- bool

true, false

 true false 대신 0과 그 외의 값은 사용 금지

 

- char

유니코드

 2byte

char 형의 암시적 값 변환

 ushort, int, uint, long, ulong, float, double, decimal

 int Number = '7'; // 문자상수값 = 55

 

- byte, sbyte

byte 유효범위 : 부호 없는 0~255

sbyte 유효범위 : -128~127

 

- short, ushort 

short 유효 범위

 -32768 ~ 32767

ushort 유효 범위

 0 ~ 65535

 

- int, uint 

int 유효값 범위

 -2,147,483,648 ~ 2,147,483,647

uint 유효값 범위

 0 ~ 4,294,967,295

 

- float

소수점형 뒤에 f, F 접미사 명시. 없으면 double

 

- string

C/C++ 문자열과 차이점

문자열 끝에 0, ‘/0’

'+' : 문자열 연결

== : 문자열 비교

[인덱스] : 문자

문자열에 ‘\’(백슬래시)를 포함하는 경우

 @"C:\temp\test.txt" -> @ 뒤에 나온 문자열을 하나의 경로로 침.

 "C:\\temp\\test.txt" -> @를 표시하지 않을 때, \를 표현하기 위해 \를 두 번 씀.

   -> @쓰는 것을 더 선호.

   -> 윈폼에서 디렉토리를 읽을 때 많이 사용됨.

 

- 암시적 데이터형 var

대입되는 데이터에 따라 데이터형 결정

var를 사용할 수 없는 예

 null값 초기화, 매개변수로는 사용 못함

 var는 지역변수로만 사용. 클래스 멤버로는 사용 못함

 연속적으로 초기화 하는 경우 : var m = 10, n = 20;

 

- nullable 

null을 허용하지 않는 데이터형 null값을 허용

 ->기본 데이터형

 null이 데이터에 저장되어 있다는 것은 쓸 수 있는 데이터가 없다, 비교 용도, 값이 없으면 null값으로 표현하는 경우가 있음.

 형식 : 데이터형? 변수명;

 int? Var1;

 bool? Var2 = null; // true, false, null

 속성

   .HasValue // true, false

   .Value // 읽기 전용

 

 

 

 

2. 변환

- 데이터 변환

ToString() : 현재의 값을 문자열로 바꿔주는 것.

기본 데이터형.Parse()

 ex) int.Parse() : int형으로 변환.

Convert.ToInt32()

Convert.ToSingle() -> float로 변환

Convert.ToXXXXX()

 

- 박싱(boxing)

데이터 형을 최상위 object형으로 변환하여 힙(heap 메모리)에 저장

int m = 123;

object obj = m;

 

- 언박싱(unboxing)

힙에 저장된 형식을 다시 원래의 형식으로 변환

int n = (int)obj;

 

-> 어떤 값(이전 값)을 저장하거나 할 때 박싱으로 보관하고 ctrl+z와 같은 되돌리기 기능을 사용할 때 언박싱할 때 사용할 수 있음

 

 

 

 

 

3. 표준 입력

Console.ReadKey() : 사용자가 눌린 키 한 준자 정보를 리턴하는 메소드

함수 원형

public static ConsoleKeyInfo ReadKey()

public static ConsoleKeyInfo ReadKey(bool intercept)

 -> true:화면 출력 안함, false:화면 출력

 

ConsoleKeyInfo : 키의 문자와 Shift,Alt,Ctrl 보조키 상태 포함

ConsoleKeyInfo 속성

- ConsoleKeyInfo.Key

 ConsoleKey 열거형 값 : ConsoleKey.A, ConsoleKey.Escape

 

ex)

ConsoleKeyInfo KeyInfo;

do{

    KeyInfo = Console.ReadKey();

    if(KeyInfo.Key == ConsoleKey.A)

        Console.WriteLine("a가 눌렸다“);

} while (KeyInfo.Key != ConsoleKey.Escape);

 

실행값:

(소문자 일 때) a가 눌렸다

(대문자 일 때) a가 눌렸다

=>대소문자 구별 없다는 것을 알 수 있음.

 

 

- ConsoleKeyInfo.KeyChar

눌린 키의 유니코드를 얻는 속성으로 대소문자 등을 모두 구분할 수 있다.

 

class Program{

    static void Main(string[] args){

        ConsoleKeyInfo KeyInfo;

        do{

            KeyInfo = Console.ReadKey(true);  // true를 입력하면 화면에 뭘 띄우지 않고 입력을 받아냄

            if(KeyInfo.KeyChar == 'a')

                Console.WriteLine("a가 눌렸어");

} while (KeyInfo.Key != ConsoleKey.Escape);

 

 

- 활용

입력 받은 문자열을 숫자로 사용할 때는 Convert.ToInt32() 등의 메소드를 사용

 

 

 

 

4. 사용자 지정형

- 구조체

public struct 구조체명

{

    //멤버, 속성, 메소드

}

 

제한 사항

 구조체에 선언된 const, static 변수만 초기화 기능

 

 

 

 

구조체 안에 선언할 수 있는 생성자는 매개변수가 반드시 있어야 함

결과값:

12

0

12

-> 구조체를 선언을 하거나 생성을 하게 되면 기본적으로 0으로 셋팅됨.

 

 

 

구조체를 같은 구조체에 대입하게 되면 값이 복사

결과값: 10

 

 

 

 

구조체는 값 형식이고 클래스는 참조 형식임

결과값:

12 24

24 24

 

 

 

구조체는 값 형식이므로 선언만으로도 사용 가능

 new를 사용했을 때만

  -> 생성자가 호출

  -> 기본값으로 초기화

 

구조체는 구조체 또는 클래스에 상속할 수 없음

구조체는 인터페이스를 상속하여 메서드를 구현할 수 있음

 

 

 

 

 

- 열거형

상수를 문자열로 대치하여 선언

상수에 의미 부여

 

형식

 enum 열거형 명칭 {문자열1, 문자열2}

 enum 열거형 명칭 {문자열1 = 상수, 문자열2 = 상수};

 enum 열거형 명칭 {문자열1 = 상수, 문자열2};

 

기본은 int형이지만 char형을 제외한 형식 지정할 수 있음

enum Days : byte {Sun=0, Mon, Tue, Wed, Thu};

열거형 변수가 아닌 변수에 열거형 값을 대입할 때는 데이터형을 명시할 것

결과값: 2 Tue

 

 

 

 

 

 

 

5. 값 형식과 참조 형식

값 형식 - 선언과 동시에 바로 사용 가능, 복사가 이루어짐

참조 형식 - new를 통해서 생성해야만 메모리가 형성되어 사용가능. (별명)

 

- 값 형식

System.Object

 +System.ValueType에서 파생

변수가 직접 값을 저장하는 형

기본 데이터형, 구조체, 열거형

선언 vs 생성(new)

 (선언은 초기화 해줘야 함)

 

- 참조 형식

한 객체를 참조형 변수가 사용할 때 참조형에 의해 내용이 바뀌면 객체에 영향을 줌.

class, interface, delegate, 배열, string

객체와 참조형 사이의 대입은 객체의 메모리 주소가 복사됨.

 

 

 

 

 

 

 

 

반응형

'Language > C#' 카테고리의 다른 글

[ C# ] 배열  (0) 2020.09.02
[ C# ] C# 기본 문법  (0) 2020.09.02
[ C# ] C# 프로그래밍의 기본 구조  (0) 2020.09.01
[ C# ] .NET Framework와 C#언어  (0) 2020.09.01
[ C# ] StopWatch 구현  (0) 2019.08.12

댓글