-
[03강] 데이터형, 변환, 표준 입력형식프로그래밍/C# 2022. 4. 12. 01:14
목차
1. 데이터형
2. 변환
3. 표준 입력
4. 사용자 지정형
5. 값 형식과 참조 형식
6. 정리데이터형
-기본 데이터형 : C#의 데이터형 object로부터 파생된 객체
System.Object == object
일반적으로 데이터형이란 메모리와 1:1로 대응하여, 해당 메모리에 변수의 이름으로 접근하는 역할을 하게 된다. 하지만 C#에서의 데이터형은 object로부터 파생된 객체이므로, 단순하게 메모리를 관할하는 것이 아니라 메모리의 값을 다른 용도로 사용할 수 있게 해주는 함수(메서드)와 메서드를 통해서 저장한 값을 가공하고, 설정할 수 있게 하는 변수들이 존재한다.
-데이터형은 CTS에서 정의된 객체
-정수형 : 최소값 최대값 찾기 : short.MinValue, int.MaxValue .... ( 기본 제공되는
byte : System.Byte, 1byte : 부호가 없는 8비트 정수(0 ~ 255)
sbyte : System.SByte, 1byte : 부호가 있는 8비트 정수(-128 ~ 127)
short : System.Int16, 2byte : 부호가 있는 16비트 정수(-32768 ~ 32767)
ushort : System.UInt16, 2byte : 부호가 없는 16비트 정수(0 ~ 65535)
int : System.Int32, 4byte : 부호가 있는 32비트 정수(-2147483648 ~ 2147483647)
uint : System.UInt32, 4byte : 부호가 없는 32비트 정수(0 ~ 4294967295)
long : System.Int64, 8byte
ulong : System.UInt64, 8byte
-실수형
float : System.Single, 4byte : 소수점 뒤에 f, F 접미사 명시
double : System.Double, 8byte : 명시가 없으면 double형
decimal : System.Decimal, 16byte
-논리형 : true, false만 저장할 수 있으며, 0과 그 외의 값은 사용 금지
bool : System.Boolean, 1byte
-문자형 (*주의할 것, C나 C++과는 달리, C#에서 char형은 2바이트 공간을 가지며, 유니코드로 저장이 된다.)
char : System.Char, 2byte
char형의 암시적 값 변환 : unshort, int, uint, long, ulong, float, double, decimal. : 해당 값에 해당하는 유니코드 값으로 저장된다.
ex ) int number = '7'; // '7'의 유니코드 값은 55이므로 55라는 값이 저장된다.
-문자열형 : C/C++ 문자열과 차이점 : 문자열 끝에 0, \0. 문자열변수.Lenght로 문자열의 크기를 알 수 있다.
string : System.String
+ : 문자열 연결
== : 문자열 비교
[인덱스] : 문자
문자열에 '\'(백슬래시)를 포함하는 경우 : @를 표시하면 뒤에 나오는 부분을 경로로 인식함. 경로로 인식시키지 않고 백슬래시를 출력하고 싶을 때에는 백슬래시를 두개 연속 사용.
- 암시적 데이터형
var : 대입되는 데이터에 따라 데이터형이 결정된다.
var를 사용할 수 없는 예
- null값으로 초기화 할 경우, 매개변수로는 사용할 수 없다
- var는 지역변수로만 사용 가능하며 클래스 멤버로는 사용할 수 없다.
- 연속적으로 초기화하는 경우 ex. var m = 10, n = 20;
- nullable형
null을 허용하는 데이터형이 null값을 허용
형식 : 데이터형? 변수명; ex. int? var1; bool? var2;
속성 : .HasValue (true, false), .Value(읽기 전용)
변환
- 데이터 변환
ToString() : 데이터 값을 문자열형으로 변환해준다.
기본 데이터형.Parse(문자열) : 기본 데이터형에서 제공하는 메서드. 문자열을 기본 데이터형으로 변환해준다.
Convert.ToInt32(), Convert.ToSingle(), Convert.ToXXXXX() : 데이터형으로 변환해준다. Single은 float인것을 주의하자.
- 박싱과 언박싱
박싱(boxing) : 데이터 형을 최상위 object형으로 변환하여 힙(heap 메모리)에 저장. ex. int m = 123; object obj = m;
언박싱(unboxing) : 힙에 저장된 형식을 다시 원래의 형식으로 변환. ex. int n = (int)obj;
표준 입력
- Console.ReadKey() : 사용자가 누른 키 한 문자 정보를 리턴하는 메서드
- 함수 원형
public static ConsoleKeyInfo ReadKey()
public static ConsoleKeyInfo ReadKey(bool intercept) true : 화면 출력 안 함 false : 화면 출력
- ConsoleKeyInfo : 키의 문자와 Shift, Alt, Ctrl 보조키 상태 포함
속성 : ConsoleKey.Key : ConsoleKey 열거형 값.
ConsoleKeyInfo.KeyChar : 눌린 키의 유니코드를 얻는 속성으로 대소문자 등을 모두 구분할 수 있다.
- Console.ReadLine() : 엔터키가 눌릴 때 까지 입력 받은 문자열을 리턴하는 메서드
입력 받은 문자열을 숫자로 사용할 때는 Convert.ToInt32() 등의 메서드를 사용
사용자 지정형
우리가 임의로 데이터형을 만들 수 있다는 것을 의미하며, 사용자 지정형이 더 융통성이 있다.
기본 데이터형을 가져와서 우리가 원하는 데이터 형으로 만들 수 있는 거시 사용자 지정형이다.
struct, enum, class, interface 등... (class와 interface는 이후에 설명)
- struct 구조체
형식 : public struct 구조체명 { // 멤버, 속성, 메서드 }
제한사항 :
- 구조체에 서언된 const, static변수만 초기화 가능
- 구조체 안에 선언할 수 있는 생성자는 매개변수가 반드시 있어야 함 : new 구조체명(매개변수)
- 구조체를 같은 구조체에 대입하게 되면 값이 복사됨
- 구조체는 값 형식이고, 클래스는 참조 형식
- 구조체는 값 형식이므로 선언만으로도 사용이 가능함
new를 사용했을 때만 생성자가 호출되고 기본값으로 초기화 된다.
- 구조체는 구조체 또는 클래스에 상속할 수 없음
- 구조체는 인터페이스를 사용하여 메서드를 구현할 수 있음
- enum 열거형
상수에 문자열로 대치하여 선언. 상수에 의미를 부여한다
형식 :
enum 열거형명칭 { 문자열1, 문자열2 );
enum 열거형명칭 { 문자열1 = 상수, 문자열2 = 상수 }; // 특정 상수를 할당해주고 싶을 때
enum 열거형명칭 { 문자열1 = 상수, 문자열2 }; // 따로 세팅해주지 않으면 첫 상수 이후 +1씩 증가한다.
기본은 int형이지만 char형을 제외한 형식을 지정할 수 있음
enum days : byte { Sun = 0, Mon, Tue, Wed, Thu };
열거형 변수가 아닌 변수에 열거형 값을 대입할 때는 데이터형을 명시할 것
값 형식과 참조 형식
값 형식 : 선언과 동시에 바로 사용할 수 있고, 각각 선언된 변수들은 대입연산자를 기준으로 복사가 이루어진다.
참조 형식 : 그냥 선언만 하면 사용할 수 없고, new를 통해 생성해야만 메모리가 확보가 되며, new를 통해 생성하지 않은 변수는 그 변수는 참조형식이 되어 동일한 객체를 대신할 수 있는 별명으로 사용된다.

형식의 상속 관계 값 형식
- System.Object + System.ValueType에서 파생
- 변수가 직접 값을 저장하는 형(대입연산자로 대입하여 저장)
- 기본 데이터형, 구조체, 열거형은 모두 값 형식
- 선언 : 초기화가 되어있지 않음 vs 생성(new) : 모두다 기본값으로 셋업이 된다.
참조 형식
- 한 객체를 참조형 변수가 사용할 때 참조형에 의해 내용이 바뀌면 객체에 영향을 줌
- class, interface, delegate, 배열, string
- 객체와 참조형 사이의 대입은 객체의 메모리 주소가 복사됨
정리
- 기본 데이터형과 CTS형식을 익혀둔다
- 데이터형에 관한 검증 코드를 작성해보자
- 값 형식과 참조 형식의 차이점을 이해하자

'프로그래밍 > C#' 카테고리의 다른 글
[06강] 파일 입출력 (0) 2022.05.02 [05강] 배열 (0) 2022.04.24 [04강] C# 기본 문법 (0) 2022.04.12 [02강] C#프로그래밍 기본 구조 (0) 2022.03.24 [01강] 닷넷프레임워크와 C#언어 (0) 2022.03.24