ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.