Section 34.1: Anonymous 와 dynamic 타입 비교

Anonymous 타입은 미리 명시적으로 타입을 정의하지 않고도 객체를 생성할 수 있도록 해 주며, 이러한 경우에도 정적 (static) 타입 검사는 이루어지게 된다.

var anon = new { Value = 1 }; Console.WriteLine(anon.Id); // 컴파일 에러

반대로, dynamic 타입은 동적 (dynamic) 타입 검사를 하게 되는데, 이는 컴파일 에러 대신에 런타임 에러를 발생시키게 된다.

dynamic val = "foo"; Console.WriteLine(val.Id); // 컴파일은 되지만 런타임 에러를 throw 하게 된다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 33.1: 내장 (Built-In) 타입 테이블

아래 테이블은 C# 내장 타입들에 대한 키워드들을 보여주고 있는데, 이들은 System 네임스페이스에 존재하는 내장 타입들에 대한 별칭 (alias) 들이다.

C# 타입 .NET 프레임워크 타입
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
object System.Object
short System.Int16
ushort System.UInt16
string System.String

C# 타입 키워드들과 그 별칭들은 서로 상호 교체 가능한다. 예를 들어, 아래 두가지 방식 모두 정수형 변수를 선언 가능하게 해 준다:

int number = 123; System.Int32 number = 123;
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.7: 값 타입 (Value type) - bool

// boolean 의 기본값은 false 이다 bool b; // nullable 한 boolean 의 기본값은 null 이다 bool? z; b = true; if (b) { Console.WriteLine("Boolean has true value"); }

bool 키워드는 System.Boolean 에 대한 별칭 (alias) 이다. 이는 Boolean 값인, truefalse 를 저장하기 위한 변수를 선언하기 위해 사용된다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.6: 값 타입 (Value type) - ushort, uint, ulong (부호가 없는 16 비트, 32 비트, 64 비트 정수들)

// 부호가 없는 short 가 표현할 수 있는 가장 작은 값을 할당한다 ushort s = 0; // 부호가 없는 short 가 표현할 수 있는 가장 큰 값을 할당한다 ushort s = 65535; // 부호가 없는 int 가 표현할 수 있는 가장 작은 값을 할당한다 uint i = 0; // 부호가 없는 int 가 표현할 수 있는 가장 큰 값을 할당한다 uint i = 4294967295; // 부호가 없는 long 이 표현할 수 있는 가장 작은 값을 할당한다 (예제에서는 숫자 마지막에 부호가 없는 long 값을 나타내는 접미어가 붙었음에 유의한다) ulong l = 0UL; // 부호가 없는 long 이 표현할 수 있는 가장 큰 값을 할당한다 (예제에서는 숫자 마지막에 부호가 없는 long 값을 나타내는 접미어가 붙었음에 유의한다) ulong l = 18446744073709551615UL;

또한 이런 타입들을 nullable 로 만들 수도 있는데, 이는 일반적인 값 할당 뿐만이 아니라 null 을 할당할수도 있다는 것을 의미한다. nullable 타입의 변수가 초기화되어 있지 않은 경우, 그 값은 0 이 아니라 null 을 나타낼 것이다. nullable 타입은 타입 이름 뒤에 물음표 (?) 를 붙여 표시한다.

int a; // 이 값은 0 이다 int? b; // 이 값은 null 이다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.5: 값 타입 (Value type) - short, int, long (부호가 있는 16 비트, 32 비트, 64 비트 정수들)

// 부호가 있는 short 가 표현할 수 있는 가장 작은 값을 할당한다 short s = -32768; // 부호가 있는 short 가 표현할 수 있는 가장 큰 값을 할당한다 short s = 32767; // 부호가 있는 int 가 표현할 수 있는 가장 작은 값을 할당한다 int i = -2147483648; // 부호가 있는 int 가 표현할 수 있는 가장 큰 값을 할당한다 int i = 2147483647; // 부호가 있는 long 이 표현할 수 있는 가장 작은 값을 할당한다 (예제에서는 숫자 마지막에 long 값을 나타내는 접미어가 붙었음에 유의한다) long l = -9223372036854775808L; // assigning a signed long to its maximum value (예제에서는 숫자 마지막에 long 값을 나타내는 접미어가 붙었음에 유의한다) long l = 9223372036854775807L;

또한 이런 타입들을 nullable 로 만들 수도 있는데, 이는 일반적인 값 할당 뿐만이 아니라 null 을 할당할수도 있다는 것을 의미한다. nullable 타입의 변수가 초기화되어 있지 않은 경우, 그 값은 0 이 아니라 null 을 나타낼 것이다. nullable 타입은 타입 이름 뒤에 물음표 (?) 를 붙여 표시한다.

int a; // 이 값은 0 이다 int? b; // 이 값은 null 이다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.4: 값 타입 (Value type) - char

// 단일 문자 s char c = 's'; // 정수값으로부터 변환 (cast) 된 문자 s char c = (char)115; // 단일 유니코드 문자 s char c = '\u0073'; // 유니코드 문자 : 웃는 얼굴 char c = '\u263a';
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.3: 불변 참조 타입 (Immutable reference type) - string

// 문자열 literal 로부터 새로운 string 을 할당한다 string s = "hello"; // 문자 배열로부터 새로운 string 을 할당한다 char[] chars = new char[] {'h', 'e', 'l', 'l', 'o'}; string s = new string(chars, 0, chars.Length); // 문자열의 char 포인터로부터 새로운 string 을 할당한다 string s; unsafe { fixed(char * charPointer = "hello") { s = new string(charPointer); } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 32.2: Boxing 된 값 타입 비교하기

값 타입 (value type) 이 object 타입의 변수에 할당된 경우, 우리는 이를 Boxing 되었다고 표현한다 - 해당 값은 System.Object 인스턴스에 저장된 상태인 것이다. 이러한 경우, == 를 이용하여 값을 비교하려고 하는 경우 의도치 않은 결과를 맞이하게 될 수도 있다. 아래 예제를 확인한다:

object left = (int)1; // int 값이 Boxing 되었다 object right = (int)1; // int 값이 Boxing 되었다 var comparison1 = left == right; // false 가 반환된다

이러한 경우 우리가 기대하는 값을 반환해 주는, 재정의된 (overloaded) Equals 메소드를 사용함으로써 위와 같은 예기치 못한 상황을 피할 수 있다.

var comparison2 = left.Equals(right); // true 가 반환된다

혹은, 좌측과 우측 변수를 모두 Unboxing 하여 int 값 자체가 비교되도록 하는 방식으로 동일한 결과를 얻을 수도 있다:

var comparison3 = (int)left == (int)right; // true 가 반환된다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts