3강. 데이터형

InSung-Na·2023년 7월 26일
0

나우캠퍼스_C#

목록 보기
4/7
post-thumbnail

1. 데이터형

기본 데이터형

  • C#의 데이터형 object로부터 파생된 객체
  • CTS(Common Type System)에서 정의된 객체

정수형

키워드클래스용량
byteSystem.Byte1 byte
sbyteSystem.SByte1 byte
shortSystem.Int162 byte
ushortSystem.UInt162 byte
intSystem.Int324 byte
uintSystem.UInt324 byte
longSystem.Int648 byte
ulongSystem.UInt648 byte

실수형

  • C#의 float는 클래스가 System.Single 이다.
키워드클래스용량
floatSystem.Single4 btyte
doubleSystem.Double8 btyte
decunakSystem.Decimal16 btyte

문자(열)형

  • C#의 문자형(char)는 2 byte 이고 ''로 정의한다.
    • char 문자 = '굿';
  • 문자열형은 ""로 정의한다
    • string a = "Hello World";
  • 문자열 출력 추가내용
    • '\' 출력 방법
      • @"C:\aaa\aaa\aaa.exe"
      • "C:\aaa\aaa\aaa.exe"
키워드클래스용량
charSystem.Char2 byte
stringSystem.String-

bool 형

키워드클래스용량
boolSystem.Boolean1 byte

var 키워드

  • 대입되는 데이터에 따라 데이터형 결정
  • ex. foreach(var i in Array){내용;}
  • 사용할 수 없는 예
    • null값 초기화, 매개변수X
    • only 지역변수, 클래스 멤버X
    • 연속적으로 초기화하는 경우
      • ex. var m = 10, n = 20;

var vs object

  • var를 사용해서 데이터형이 지정되면 변경 불가능
  • object는 변경가능, 하지만 boxing & unboxing이 필요함
    • boxing&unboxing 정리파트 이후에 작성예정

2. 변환

  • 기본데이터형.ToString() <=> 기본데이터형.Parse()
  • Convert.ToInt32()
  • Convert.ToSingle()
  • Convert.ToXXXXX()

3. 표준 입력

표준 입력

  • 참조 : 표준입력-공식문서
  • Console.ReadKey()
  • public static ConsoleKeyInfo ReadKey(bool intercept)
    • true: 화면출력안함
    • false: 화면출력(default)
  • ConsoleKeyInfo
    • 키의 문자와 Shift, Alt, Ctrl 등 보조키 상태 포함
  • ConsoleKeyInfo.Key: 입력된 키 위치 확인
  • ConsoleKeyInfo.KeyChar: 대소문자 구분 키 확인
//ConsoleKeyInfo는 구조체 형식

Console.WriteLine("ESC를 누르면 종료합니다");
ConsoleKeyInfo KeyInfo;
do
{
    KeyInfo = Console.ReadKey(true); //안보이게 설정
    if (KeyInfo.Key == ConsoleKey.A) //A입력시 실행
        Console.WriteLine("A를 입력했습니다");
  // ESC를 누르면 종료
} while (KeyInfo.Key != ConsoleKey.Escape); 

4. 사용자 지정형

  • struct, enum, class, interface 중 class와 interface는 나중에 배움으로 생략

struct

  • 제한사항
    • 구조체에 선언된 const, static 변수만 초기화 가능
    • 구조체 안에 선언할 수 있는 생성자는 매개변수가 반드시 있어야 함
    • 구조체를 같은 구조체에 대입하게 되면 값이 복사
    • 구조체는 값 형식이고 클래스는 참조 형식
    • 값 형식이므로 선언만으로 사용 가능
      • new를 사용하면 생성자가 호출되어 기본값으로 초기화 됨
    • 구조체 또는 클래스에 상속X
    • 인터페이스를 상속하여 메서드 구현 가능
접근지정자 struct 구조체명
{
	// 멤버, 속성, 메서드
}

enum

  • 상수를 문자열로 대치하여 선언
  • enum 열거형 명칭 {문자열1, 문자열2};
    • 문자열1=10으로 설정하면 다음 데이터는 1씩 증가
    • enum Days {Sun, Mon, ..., Sat};
  • 기본은 int형이지만 char형을 제외한 형식 지정가능
    • enum Days:byte{Sun=0, Mon, Tue, ... , Sat};
  • 열거형 변수가 아닌 변수에 열거형 값을 대입할 때는 데이터형을 명시할 것

5. 값 형식과 참조 형식

스택(Stack)

  • 고정된 크기(정적)의 메모리
  • 데이터를 쌓아올리는 구조의 메모리
  • 데이터 처리 방식 : Last-In-First-Out(=후입선출)

값 형식

  • 메모리에 값을 담는 데이터 형식
  • 스택에 할당(즉, 자동으로 제거됨)
    • 지역변수가 stack에 할당됨, 메서드 호출이 완료되면 스택 메모리가 자동으로 회수되고 값이 제거됨
  • 기본데이터 형식과 구조체가 여기에 해당됨

큐(Queue)

  • C#에서 큐의 사용은 선택적
    • System.Collections.Queue
  • 데이터 처리 방식 : First-In-Fist-Out(=선입선출)

힙(Heap)

  • 유동적 크기(동적)의 메모리
  • 자유롭게 데이터를 저장할 수 있는 메모리

참조 형식

  • heap에 데이터를 저장하고 해당하는 메모리를 참조하는 방식
  • 처음 변수만 선언하면 값 형식과 달리 메모리가 할당되지 않음
  • 힙에 할당(가비지 콜렉터에 의해 제거됨)
  • 배열, 클래스, 인터페이스, 델리게이트, 문자열, Object 등이 여기에 해당

Boxing&Unboxing

  • Boxing
    • 값 형식 -> 참조 형식으로 변환하는 것
    • stack -> heap
    int num = 42;
    object boxedNum = num; // Boxing
  • UnBoxing
    • Boxing된 데이터를 값 형식으로 변환하는 것
    • heap -> stack
    object boxedNum = 42;
    int num = (int)boxedNum; // Unboxing

6. 정리

  • 기본 데이터형과 CTS 형식을 익혀둔다.
  • 데이터형에 관한 검증 코드를 작성해보자.
  • 값 형식과 참조 형식의 차이점을 이해하자.
구분설명
값 형식기본 데이터형, struct, enum
참조 형식class, interface, delegate, array, string

7. Reference

0개의 댓글