[C#] 캐스팅, 리터럴
캐스팅
캐스팅: 데이터 타입을 한시적으로 변경
- 동일 타입 계층에서 가능
- 서로 다른 타입을 연산이 가능하게 만듦
- 컴파일러가 작은 타입을 큰 타입으로 자동 변경
- 큰 타입을 작은 타입으로 수동 변경 가능
- 큰 타입을 작은 타입으로 캐스팅 할 시 데이터 상실
- 컴파일타임에 변경
암시적 캐스팅 (Implicit)
암시적 캐스팅: 자동 타입 변경
위에서 언급한 <컴파일러가 작은 타입을 큰 타입으로 자동 변경> 하는 경우
int a = 1;
float b = a;
타입 변경에 문제가 없을 때 컴파일러가 자동으로 실행 (작은 타입 -> 큰 타입으로)
정수가 실수에 포함되어, 정수를 실수 타입으로 자동 캐스팅
명시적 캐스팅 (Explicit)
명시적 캐스팅: 동일 타입 계층 내에서 수동으로 타입 변경
위에서 언급한 <큰 타입을 작은 타입으로 수동 변경> 하는 경우
float f = 1.23f;
int a = (int)f;
(int)를 사용해 명시적으로 큰 타입에서 작은 타입으로 캐스팅
-> 0.23의 값은 손실
int와 float의 메모리 차지
실행 결과 false /n true가 나온다.
int와 float는 메모리 크기가 동일하지만, float는 해당 메모리를 정수부, 소수부로 나누어 근사치로 저장해 오차가 발생
*같은 계층이 아닌 경우 데이터 변환
int -> string?
타입 계층이 달라 캐스팅 불가
1. ToString() 함수를 이용 (bool, char도 가능)
2. 다른 문자열과 합성
3. $string으로 문자열
string -> int?
int 형식을 갖췄다면 Parse, Convert를 사용해 변경 가능
리터럴
리터럴: 코드에서 데이터를 표현하는 방법
float f = 1.23f 에서의 f
double d = 123.1; 는 기본
decimal dc = 123.1m; 에서의 m
char c = 'a' 에서의 '
string s = "string"에서의 ""
*주요 내용은 너무 쉬워서 안했지만 기억해야 할 것
c++에서는 위에 코드가 오류가 안 나지만, c#에서는 오류가 난다
case문 안에서 명령문이 있다면 무조건 break;가 필요하고, 명령문이 없는 경우 case1: case2: 식으로 넘어갈 수 있다.
코드 내에서 부모부터 인식하기에, 부모한테 있는 변수를 자식이 다시 정의하려 해서 둘 다 오류가 뜬다.