[C#] 기본 타입과 변수

[원본 링크]

C#도 C계열이라서 변수선언법은 다 같다.

타입 변수명;
or
타입 변수명 = 초기화값;

그리고 기본타입들은 자바와 거의 동일하다.
이 이미지는 퍼온것이다.
https://www.c-sharpcorner.com/blogs/data-types-in-c-sharp

image Data Types In C#In this blog, I am going to explain data types in C#.www.c-sharpcorner.com

정수 타입으로는 byte, short, int, long이 있다. 그리고 unsigned 키워드가 따로 없이 부호없는 타입이 제공된다.
ushort, uint, ulong이 그것들이다. 다만 byte는 에외인데, byte는 부호없는 타입이기 때문이다. 그래서 sbyte 타입이 제공된다.

문자 타입으로는 char이 있다. 자바처럼 2바이트를 쓴다.
그리고 string이 문자열을 나타낸다.

논리 타입으로는 bool이 있고

실수형으로는 익숙한 float double이 보인다.
그리고 decimal은 이름만 보면 10진수 정수형같은데 실수형이다. 16바이트인데다가 위의 두놈보다는 범위는 오히려 적은데 정확도가 높은 것이다. 왜 데시멀로 이름을 붙였는지는 모르겠다. e표기에 10이 들어가서 그런가?
여튼 MSDN에서 말하는 데시멀의 용도는 이렇다.

decimal 키워드는 128비트 데이터 형식을 나타냅니다.decimal 형식은 부동 소수점 형식보다 전체 자릿수는 크고 범위는 작아서 재무 및 통화 계산에 적합합니다.다음 표에서는 decimal 형식의 대략적인 범위와 전체 자릿수를 보여 줍니다.


object는 좀 특별한 타입이다. 이건 모든 것을 담을 수 있는 만능 저장소다. 모든 타입은 이 오브젝트타입을 무적권 필수적으로 상속받기 때문에 모든 것은 객체이며 자바와 달리 기본타입들도 이 타입을 상속한다.
모든걸 다 담을 수 있기 때문에 데이터들을 주고받고 보관할때 쓰면 참 편하다. 문제는 이게 성능을 좀 쳐먹는단거다.
다른 타입을 object로 변환하거나 저장하는걸 박싱이라 한다. object라는 만능 박스에 담는다는 뜻이겠지. 그리고 object값 원래의 타입으로 되돌리는 걸 언박싱이라 한다. 이러한 행위는 최대한 자제하는 것이 바람직하다.

그리고 버전 3.0부터는 컴파일타임 형식연역키워드인 var이 추가되었다. 2007년이다. 자바에서는 바로 얼마전 Java10에 추가돼서 아직 제대로 적용도 안되고있는 것과 대비된다. C++의 auto와 달리 이건 나름 제약사항이 있는데 거의 단순 로컬변수로만 사용이 가능하다. 예외가 있긴 한데 암튼 거의 그렇다.

상수화 관련 키워드로는 readonly와 const가 있다.
readonly는 말그대로 읽기전용이다. 근데 이거 제약이 심해서 멤버변수로만 사용이 가능하다. 로컬에선 안돼
const는 C와는 또 사뭇 다르다. 오히려 C++의 constexpr와 매치된다. 컴파일 타임 상수라는 뜻이다. 바로 초기화해야 하고 적용할수있는 타입도 기본타입들밖에 없다.
그럼 다른 타입들에도 쓸수 있는 C의 const와 같은 널널한 상수는 없어? 그런거 없다. C#이 이런쪽에서는 인색하다.


아! 그리고 배열은 자바와 사용법이 유사한 편이다.
타입[] 배열명 = new 타입[배열길이] {값,값2,값3,값4...};
타입[] 배열명 = new 타입[] {값,값2,값3,값4...};
타입[] 배열명 = {값,값2,값3,값4...};

이렇게 쓸수 있다.
그리고 다차원배열은
[2차원,1차원] 이렇게 표현한다.
그러니까 이렇게 쓸수 있다는 말이다.
타입[,] 배열명 = new 타입[2차원길이,1차원길이];

들쭉날쭉 못생긴 가변배열도 지원이 되는데 뭐 이건 쓸데도 없으니까 넘어가고

더 쓸거 있나? 일단 여기서 변수파트는 끝을 맺는다.