* Object 클래스
: 모든 클래스의 기본이 되는 클래스. 모든 클래스는 object를 상속받는다.
- 박스화: 값형의 데이터를 객체형의 변수에 대입하는 것. object 클래스에는 참조형뿐만 아니라 값형의 데이터도 대입할 수 있다.
- 박스화 해제: 반대로 값형에 object형의 데이터를 대입하는 것. 형을 명확하게 하기 위해 형 변환 사용.
* 네임스페이스 (namespace)
: 클래스나 구조체의 그룹. 참조는 '.'.
만약 다른 네임스페이스 중 같은 이름의 클래스나 구조체가 정의되어 있다고 해도, 네임스페이스로 격리되어 있어 경합이 일어나진 않는다.
네임스페이스 안에 네임스페이스를 만들 수 있다.
* 시스템 (system)
: 항상 using 뒤에 붙언 system. 이것은 system 네임스페이스를 말한다.
많은 메소드가 시스템 안에 존재한다. ex) Console 클래스.
→ using
: 뒤에 지정한 네임스페이스를 이용한다는 것을 선언한다. 프로그램 맨 앞이나 네임스페이스 블록 맨 앞에 명시한다.
사실 Console.WriteLine() 은 System.Console.WriteLine() 이 맞지만 맨 앞에 using system 이 붙기 때문에 시스템을 생략한다.
네임스페이스명이 길어져서 사용하기 곤란할 때 별명을 붙일 수 있다.
* var (형 추론)
: int나 string 대신 사용하면 형을 지정하지 않고 변수 선언이나 객체 생성을 할 수 있다.
(C#이 컴파일 시 추측)
var x1 = 10; // int 형이 된다. var x2 = 10.0; // double 형이 된다. var str = "candy"; // string 형이 된다. |
초기화하는 우변 값으로 형을 추측해서 변수 형을 결정한다. 때문에 추측할 우변이 없다면 오류가 난다.
var로 배열을 선언할 수 있다.
var animals = new [] { "cat", "bird", "dog" }; // 이 둘은 같은 의미이다. string [] animals = new string [] { "cat", "bird" , "dog" }; |
* dynamic
: 실행 시 동적으로 형이 결정되는 변수를 선언할 수 있다.
var와 다른 점은 var는 컴파일할 때 형이 결정되고, dynamic은 실행될 때 결정된단 점이다.
dynamic x; //먼저 키워드로 변수를 선언한다. if (DeteTime.Now.Second % 2 == 1) { x = 1; //int형이 됨. } else { x = "제로"; //string형이 됨. } |
* ExpandoObject
: dynamic 과 사용하면 동적으로 멤버를 추가할 수 있는 오브젝트를 만들 수 있다.
* 확장 메소드
: 상속하지 않고도 기존 클래스에 메소드를 추가할 수 있게 한다.
* 객체 초기화자
초기화할 수 있는 것은 public 등의 수식자가 붙은 액세스 가능한 필드 와 속성
* 익명 형
: 이름 없는 클래스를 만들 수 있다.
var myanimal = new { age = 10, name = "tama" }; |
다만, 익명 형으로 만들어진 속성은 읽을수만 있다. 다음과 같이 값을 설정( myanimal.age = 20; )하면 에러가 난다.
* 식 형식 멤버. ( => )
: 메소드 본체가 식 하나뿐일 때, { } 대신 =>로 간단하게 사용할 수 있다.
class Animal { public string name; public void print() { Console.WriteLine("이름 : " + name); } } // 이 둘은 같다. class Animal { public string name; public void print() => Console.WriteLine("이름:" + name); } |
값을 반환하는 메소드의 경우,
class Calc { public int Add(int a, int b); { return a + b; } } // 이 둘은 같다. class Calc2 { public int Add(int a, int b) => a+b; } |
return은 기술하지 않는다.
속성의 경우도 사용할 수 있다.
class Animal { string name; public string name { get { return name; } set { name = value; } } } // 이 둘은 같다. class Animal { string name; public string name; { get => name; set => name = value; } } |
* 예제 프로그램
: 곤충을 기본 클래스로 두고 나비와 메뚜기를 파생 클래스로 만든다. 성장과정은 기본 클래스에서 정의하고 구체적인 방법을 상속 클래스에서 정의한다.
* is 와 as
: 참조형을 대상으로 한 연산자.
- is
: 지정한 데이터형과 식의 형이 일치하는 경우 true 반환, 다를 경우 false 반환.
int a = 36; string b = "책갈피"; Console.WriteLine(a is double); Console.WriteLine(b is string); 결과: False True |
파생 클래스의 객체를 기본 클래스에서 평가한 경우도 true가 나온다.
기본 클래스의 객체더라도 파생 클래스의 객체에 대해 참조가 저장되어 있다면 파생 클래스의 형을 비교대상으로 한다.
- as
: 지정한 데이터 형으로 변환한다.
형 변환과 같지만 차이점은, 반환할 수 없을 때 형 변환은 오류를 반환하는데, as는 null을 반환한다.
'메타버스기반게임콘텐츠기획 > 스터디(C#이 보이는 그림책)' 카테고리의 다른 글
7장, 파일과 스트림 (7-1) (0) | 2021.12.06 |
---|---|
6장, 클래스의 응용 (문제) (0) | 2021.12.05 |
6장, 클래스의 응용 (6-1) (0) | 2021.12.01 |
5장, 클래스의 속성 (문제) (0) | 2021.11.29 |
5장, 클래스의 상속 (5-2) 오버라이드 / 구조체 (0) | 2021.11.29 |