2008. 10. 3. 17:20

[펌] CTS(Common Type System)와 C#의 자료형(Value-Type, Reference-Type)

CTS(Common Type System

----------------------------

• CTS supports object-oriented and Procedural languages.

• CTS supports both value and reference types

 

좀더 알아보면 CTS 는 닷넷 프레임워크에서 동작하는 모든 프로그래밍 언어(C#, VB.Net, J#)들이 쪽같은 데이터형식을 사용하도록 해주는 것입니다.

(System.Int32라는 클래스는 CTS에서 제공하는 int 형입니다. 이것은 닷넷에서의 어떠한 개발언어에서도 사용이 가능 합니다.)

모든 데이터형식들은 기본적으로 객체에서 파생되었으며 Value type 은 객체 형식을 포장 (sealing) 해 놓은 개념 입니다.

 

-----------------------------

Value-Type, Reference-Type

-----------------------------

Value-Type

CTS 에서는 value type 과 reference type 을 지원하는데 Value type 변수들은 데이터를 직접 가지고 있습니다 .예를들어 int i=10 이라고 쓰면 i 변수에는 10 이 직접 들어 있는 것입니다. int j=i 라고 하면 i 의 값이 j에 복사되어 들어 가는 것입니다.(다아시는거죠^^), 자바에서의 기본 자료형과 같은 겁니다. Value-Type은 Built-in Type과 User-Defined Type 두가지가 있습니다. int, long, float, double 등은 Built-in Type 이고 struct, enum등은 User-Defined Type 입니다.

 

Reference-Type

데이터를 직접 저장하는 것이 아니라 레퍼런스(참조값)을 저장 합니다.(Store references to their data) 그러므로 두개의 레퍼런스형 변수는 같은 데이터(오브젝트)를 지칭하는 것이 가능 합니다.( Two reference variables can reference same object) 물론 같은 것을 서로 쳐다 볼수 있으므로 한쪽에서 변경을 하면 다른쪽은 스스로 변경을 안했어도 나중에 값을 꺼내 보면 당연히 바뀌어져 있겠죠^^;(Operations on one can affect another)

 

-------------------------------

Built-in Data Type

-------------------------------

정수형

예약어 구조체형식 크기 (Bit) 범위
sbyte System.Sbyte 8 -128~127
byte System.Byte 8 0~255
short System.Int16 16 -32,768~32,767
ushort System.UInt16 16 0~65,535
int System.Int32 32 -2,147,483,648 ~2,147,483,647
uint Systen.UInt32 32 0~4,294,967,295
long System.Int64 64 -(2^63) ~ 2^63-1
ulong System.UInt64 64 0~ 2^64-1

 

실수형, 기타

예약어 구조체형식 크기 (Bit) 범위
실수형
float System.Single 32 1.5x10^-46 ~3.4x10^38
double System.Double 64 5.0x10^-324 ~1.7x10^308
decimal System.Decimal 128 1.0x10^-28 ~7.9x10^28
기타
char System.UInt16 16 유니코드 1 자
bool System.Int32 1 0 또는 1

 

Boolean

boolean type 이 가질 수 있는 값은 true 와 false 입니다. 예 ) bool b = true --> true 는 1 과는 다르며 , 마찬가지로 false 는 0 과는 다릅니다. (C 에서는 TRUE, FALSE 를 #define 을 통해 정의하여 사용 했었습니다.. 정수를 암묵적으로 boolean 형으로 사용한 것이죠.), true 와 false 로 산술 연산을 할 수 없으며 오로지 논리 연산자를 가진 수식에 대해서만 사용가능 합니다.

 

변수 선언 하는 방법

int itemCount;

int itemCount , employeNumber; ( Possible to declare Multiple variables in one)

int employeeNumber; employeeNumber = 23;

int employeeNumber= 23;

또한 Charater형은 다음과 같이 선언 합니다. char middleInitial= ‘J'; C#은 유니코드를 사용하며 char형은 한 문자를 저장하는데 사용 합니다.

Itemcount = Itemcount + 40; --> ItemCount += 40; --> 이건 다아시죠...

 

연산자(Operator)

구분 연산자
기본 연산자 (x), ., f(x), a[x], x++, x--, new, typeof, sizeof, checked, unchecked
단항 연산자 +, -, !, ~, ++x, --x
산술 연산자 +, -, *, /, %
쉬프트 연산자 <<, >>
비교 연산자 <, >, <=, >=, is
비트 연산자 &, ^, |
논리 연산자 &&, ||
조건 연산자 ?:
할당 연산자 =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

 

[isOperator 예제] is연산자는 런타임시 주어진 타입과 객체가 서로 호환이 되는지를 검사하는 연산자 입니다. 또한 as 연산자는 Type을 변환하는데 변환이 되면 변환 시키고 변환이 안되면 NULL을 돌려 줍니다...(참고하세요~)

//is 연산자 예제
using System;

class isOperator {
static void Main() {
//C#은 모든 타입을 객체로 처리한다.
//System.Int32의 BaseType은 System.ValueType이다.
//System.Object > System.ValueType > System.Int32
int i=0;
object o;
Console.WriteLine("i is int? {0}", i is int);
Console.WriteLine("i is long? {0}", i is long);

if (i is object) {
o = i;
Console.WriteLine("o의 Base Type은 " + o.GetType().BaseType);
}
}
}

 

---------------------------------------------

모든 Object(객체)들이 가지는 메소드

---------------------------------------------

객체 지향 프로그래밍을 하는것은 객체를 많이 다른다는 이야기 입니다. 이번에는 참고로 모든 객체들이 가지고 있는 기본적인 메소드가 어떤것이 있는지 필요한것만 보도록 하겠습니다. 닷넷에서는 System.Object가 모든 객체의 최상위 클래스 입니다. (물론 자바에선 java.lang.Object 입니다.)

메소드명 설명
bool Equals() 같은 객체인지 비교, 동일한 메모리 공간을 차지해야...
int GetHashCode() 해쉬값을 얻음
Type GetType() Type 에 관한 정보(형식 정보)를 돌려 줍니다.
string ToString() 객체를 대표하는 문자열 반환, 일반적으로 문자열로 변환한다고 보면 됩니다.

 

 

출처 :  http://cafe.naver.com/itclean.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=947