C#/강의 | Lecture

[C# 기본] 2. 데이터형

SEO HOB 2018. 11. 28. 15:57

1. 기본 데이터형

1-1. C#의 데이터형은 object로부터 파생된 객체

- int a; // a는 변수 이면서 int형 객체이므로 int와 관련된 메서드, 변수 사용 가능


1-2. object는 System.Object를 말함


1-3. 정수형 : bool, int, long, short, char, byte

- int == System.Int32, 4byte

- long == System.Int64, 8byte

- char == System.Char, 2byte (유니코드)

- bool == System.Boolean , C/C++과 다르게 true, false 키워드로 할당되고, 1byte

- byte == System.Byte, 1byte


1-4. 실수형 : float, double

- float == System.Single, 4byte

- double == System.Double, 8byte


1-5. 문자열형 : string == System.String

- '+' operator로 문자열 연결 가능

- '==' operator로 문장려 비교 가능

- 대괄호를 이용해서 인덱스 접근 가능






2. 암시적 데이터형 var

2-1. 대입되는 데이터에 따라 데이터형 결정


2-2. null 값 초기화 및 매개변수로는 사용 하지 못함


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






3. null 값을 허용하는 nullable형

3-1. null을 허용하지 않는 데이터형이 null값을 허용하게 함


3-2. 사용 형식은 데이터형? 변수명;

- int? var1;

- bool? var2; // true, false, null


3-3. HasValue라는 속성을 이용해서 null인지 아닌지 확인 가능






4. 데이터 변환

4-1. 기본 데이터형을 문자열로 변환할때는 ToString() 메서드 사용


4-2. 문자열을 기본 데이터형으로 변환할때는 Parse() 메서드와 Convert 클래스 사용

- float value1 = float.Parse("3.14"); // Parse() 메서드

- int value2 = Convert.ToInt32("100"); // Convert 클래스






5. 박싱(boxing)과 언박싱(unboxing)

5-1. 데이터 형은 object로 부터 상속받아서 만들어짐


5-2. 박싱(boxing)은 데이터 형을 최상위 object 형으로 변환하여 힙메모리에 저장

- 메모리 공유하지 않음

- int m = 123;

  object obj = m;


5-3. 언박싱(unboxing)은 힙에 저장된 형식을 다시 원래의 형식으로 변환

- int n = (int)obj;






6. 표준 입력

6-1. 한 문자 정보를 입력 받는 메서드로 Console.ReadKey()

- static 멤버함수로 선언되어있음 (객체 생성없이 바로 사용가능)


6-2. 입력된 키를 ConsoleKeyInfo.Key로 확인 가능


6-3. 엔터키가 눌려질때까지 문자열을 입력받는 Console.ReadLine() 메서드

- 입력 받은 문자열을 숫자로 활용할때는 Convert.ToInt32 사용






7. 사용자 지정형 - 구조체(struct)

7-1. 구조체의 형식은 아래와 같음

- public struct 구조체명

  {

    public static int age = 12; // 외부에서 선언 없이 접근 가능

    public const float PI = 3.14f; // 외부에서 선언 없이 접근 가능

    public int val; // 일반 멤버 변수는 초기화 불가능

  }


7-2. 선언 형식은 아래와 같음 (구조체명이 MyStruct라 가정)

- MyStruct TestStruct1;

- MyStruct TestStruct2 = new MyStruct(); // 기본 생성자 호출

- MyStruct TestStruct3 = new MyStruct(10); // 매개변수가 있는 생성자가 있을 경우


7-3. 구조체가 new로 생성 될 경우 멤버 변수는 생성과 동시에 모두 0으로 초기화

- new로 생성되지 않을 경우 멤버 변수는 값을 지정해주어야 함


7-4. 구조체에 선언된 const, static 변수만 초기화 가능

- 구조체에 선언된 const, static 변수는 외부에서 구조체 변수 선언없이 접근 가능


7-5. 구조체 안에 선언할 수 있는 생성자는 매개변수가 반드시 존재

- 매개 변수가 없는 기본 생성자는 자체적으로 존재


7-6. 구조체를 같은 구조체에 대입(=)하게 되면 값이 복사


7-7. 구조체는 값 형식이고, 클래스는 참조 형식 (대입 연산자에 대해)

- MyStruct Test1 = new MyStruct();

  MyStruct Test2 = Test1; // 값이 복사되고, 서로 다른 구조체가 됨

- MyClass Test3 = new MyClass();

  MyClass Test4 = Test3; // 참조가 되는 형태로 Test4는 Test3의 별명으로 설정


7-8. 구조체는 구조체 또는 클래스에 상속할 수 없음

- C++의 구조체는 상속이 가능하지만 가능하면 쓰지 않는 것이 좋음

- C#에서는 구조체의 상속을 제한


7-9. 구조체는 인터페이스를 상속하여 메서드 구현 가능






8. 값 형식과 참조 형식

8-1. 선언은 초기값을 정해주어야 하며, 생성(new)은 0으로 초기화 됨

- int nVal1 = 12; // 선언

  int nVal2 = new int(); // 생성, nVal2는 0으로 초기화


8-2. 참조 형식은 한 객체를 참조형 변수가 사용 할 때, 참조형에 의해 내용이 바뀌면 객체에 영향을 미침

- 대입 연산자에 의해 참조가 되는 형태는 class, interface, delegate, 배열

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


8-3. 값 형식은 기본 데이터형, struct, enum