C#에서 변수타입 String과 string 둘다 사용이 가능하다. 

두 타입의 차이는 무엇일까? 결론은 차이가 없다.

아래 소스코드는 모두 정상적으로 컴파일되며 실행된다.

물론 실행 결과역시 차이가 없다.


1
2
3
4
    string str1 = "abc";
    String str2 = "abc";
    Console.WriteLine("string Type : " + str1);
    Console.WriteLine("String Type : " + str2);



타입이름인 string과 String 에 마우스를 가져다 대보면 그 이유를 알 수 있다.



아래 이미지 처럼 string 타입에 마우스를 가져다 대면 System.String 인 것으로 나온다.

System 네임스페이스에 String 타입의 변수인 것을 알 수 있다.



String 과 string 모두 컴파일러가 System.String 으로 치환하는 것이다.


 이렇게 같은 이름에 변수명을 다양하게 지원하는것은 개발자에게 편의성을 제공하기 위함이라 생각된다. 프로그래밍 언어에 따라 문자열을 다루는 클래스를 String이나 string 둘중 하나를 사용한다. 그래서 프로그래머들이 혼동을 하기 쉽기 때문에 둘다 지원하는 것으로 생각된다. 둘다 아무런 차이가 없기때문에 C# 개발을 할때에는 신경쓰지 않고 하도록 하자.

 

 그리고 long 변수는 System.Int64 로 int형 변수는 System.Int32 로 자동치환 되게 된다.

int 변수대신 System.Int32 를 사용해도 되는데 이렇게 뒤에 붙어있는 수자인 32나 64는 해당 변수가 몇 바이트를 사용하는지를 명확하게 알려준다. Int 변수타입 등은 OS나 컴파일러에 따라 메모리 크기가 달라질 수 있는데 그런것을 명확하게 해주기 위함이다.

 위에서처럼 해당 변수에 마우스를 가져다대보면 해당 변수가 몇바이트 변수인지를 쉽게 알 수 있는 장점이 있다.


이외에도 다른 변수들도 아래처럼 치환이 이루어지게 된다. 다양한 변수타입이 존재하고 각각 어떤의미인지 알아두면 좋다. 그때그때 적절한 변수를 사용하는 것이 중요하기 때문이다.


object ->    System.Object

bool ->    System.Boolean

byte ->    System.Byte

sbyte ->    System.SByte

char ->    System.Char

int ->    System.Int32

uint ->    System.UInt32

short ->    System.Int16

ushort ->    System.UInt16

long ->    System.Int64

ulong ->   System.UInt64

float ->    System.Single

string ->    System.String

double ->    System.Double

decimal ->    System.Decimal


bool은 참과 거짓을 저장하는 변수타입이다.
uint는 unsigned int 를 짧게쓴 형태로 음수가없이 0부터 양수만을 저장하는 변수이다. 큰 양수를 저장할 때 이용하면 좋다.
 가장 마지막에 double과 decimal이 존재하는데 이것도 알아두면 좋다. 둘다 소수를 저장하기 위한 변수타입이다. 하지만 큰 차이점이 존재한다.

 double은 부동소수점 방식을 이용하고 decimal은 고정소수점 방식을 이용 부동소수점 방식은 장점으론 작은 메모리공간에 큰 소수를 저장 가능하나 정확성이 떨어진다.

고정소수점 방식은 연산 속도가 빠르고 수의 정확성이 높은데신 큰수를 저장할때 메모리를 많이 잡아 먹게 된다. double은 8byte 메모리를 사용하며 decimal은 16byte에 메모리를 사용한다.

Posted by 꿈만은공돌
,