공부/C#

[C#] 캐스팅, 리터럴

굴러다니다니 2025. 5. 19. 15:09

캐스팅

캐스팅: 데이터 타입을 한시적으로 변경

  • 동일 타입 계층에서 가능
  • 서로 다른 타입을 연산이 가능하게 만듦
  • 컴파일러가 작은 타입을 큰 타입으로 자동 변경
  • 큰 타입을 작은 타입으로 수동 변경 가능
  • 큰 타입을 작은 타입으로 캐스팅 할 시 데이터 상실
  • 컴파일타임에 변경

암시적 캐스팅 (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: 식으로 넘어갈 수 있다.


코드 내에서 부모부터 인식하기에, 부모한테 있는 변수를 자식이 다시 정의하려 해서 둘 다 오류가 뜬다.

 

728x90
반응형