데이터형, 변환, 표준 입력형식
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 |
댓글