성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

JAVA - 변수 타입 캐스팅 / Type Casting 본문

백엔드개발/JAVA

JAVA - 변수 타입 캐스팅 / Type Casting

hyemi_flora 2023. 10. 25. 13:57

#타입 캐스팅 _ 0906 수업기록

*  자동 타입 캐스팅과 강제 타입 캐스팅이 있다.

*  데이터 또는 변수 앞에 (타입)을 적으면 타입이 강제로 변한다.

 

1> 자동타입캐스팅 : 명시하지 않아도 타입이 자동으로 변한다.

 - 작은 타입에서 큰 타입으로 변하는 경우

 - 특별히 문제가 발생하지 않는 경우

 - 값이 손상될 우려가 없는 자연스러운 경우

 

2> 강제타입캐스팅 : 데이터 타입을 강제로 변환하는 것

 - 큰 타입의 값을 작은 타입에 억지로 넣어야 하는 경우

 - 그 외 타입이 변했을 때 특정 기능이 손실되는 경우

 - 값이 손상될 우려가 있음을 프로그래머에게 에러로 알려야 하는 경우

 

# 타입의 크기순서

byte(1바이트) < short, char(2) < int(4) < long(8) < float(4) < double(8)

                                                                  => int 와 long 사이에 float 없는 이유

                                                                   - 소수와 정수로 비교했을 때 소수-> 정수로 갈 때 소수점 아래 분실하기 때문에 더 큰 쪽에 있는 것이다.

 

*  작은 타입의 값을 큰 타입 변수에 넣을 때는 문제가 발생하지 않는다.

*  큰 타입의 값을 작은 타입 변수에 넣을 때는 에러가 발생한다.

 

 

>>  int 타입을 short타입에 넣을 수 없어라고 에러메시지

 

 

>> 오버플로우 날 수 있음을 인지하고 그래도 작은 타입으로 변환시킬 거야라고 할 때

short s = ( byte )a;   >> byte라고 수업 때 들었는데, 이 부분은 short타입을 써도 되지 않는가..?

        byte와 short타입 다 넣어서 sysout 해보니 값은 동일하게 나왔다.

        byte b2 = (byte)i2;

 

 

 ↓↑  long 은 8바이트, float는 4바이트 이지만, 소수를 더 큰 것으로 간주한다.

             따라서 int는 타입캐스팅 해야 하지만, float는 하지 않아도 된다.

 

 

short 와 char는 모두 2byte 이지만,  서로 값을 넣을 때 강제 타입 캐스팅이 필요하다.

 

 

 >> short는 음수값이 존재할 위엄이 있음으로 확인(강제 타입캐스팅)이 필요하다.

 >> char에서 shotr로 갈 때도 32767보다 큰 양수가 포함되어 있을 가능성이 있으므로 강제타입캐스팅을 통한 확인이 필요하다.

왜냐면, char은 0~65535 까지의 값을 표현할 수 있고 short는 -32,768~32,767 값을 표현할 수 있기 때문에 서로서로 타입 캐스팅 필요.

 

 

타입 캐스팅 중간 단계를 빼고 진행한 경우,

변수 선언 하고 하지 않는 것이라 이후에 사용 못하는 것, 다시 선언하거나 또 중간 단계 생략 해서 하거나 해야 해서 비효율적일 수 있다.

 

중간단계::::

char c = (char)value;

System.out.println(c);

 

 

++> 2의 보수, 부호비트

 

메모리상

컴퓨터는 맨 앞의 자리를 부호로 인식한다.

ㅁㅁㅁㅁㅁㅁㅁㅁ ㅁㅁㅁㅁㅁㅁㅁㅁ ㅁㅁㅁㅁㅁㅁㅁㅁ 10000010 -> int i2

00000000 00000000 00000000 10000010 >> (130 이진법)

....

ㅁㅁㅁㅁㅁㅁㅁㅁ -> byte b2

10000010 >> i2를 b2에 넣었을 때

컴퓨터는 1000 0010 = 1111 1010 +1 로 계산한다.

즉, 부호비트가 1일 때 나머지 값의 2의 보수를 음수 값이라고 생각한다.

부호비트가 0일 때 나머지 값을 양수 값이라고 생각한다.

'백엔드개발 > JAVA' 카테고리의 다른 글

JAVA import & Scanner  (0) 2023.10.25
JAVA METHOD / 메서드(함수들)  (0) 2023.10.25
JAVA - 변수  (0) 2023.10.24
JAVA - Variable (변수) & Declare 변수의 선언  (0) 2023.10.24
Java - Escape / 이스케이프 문자 정리  (0) 2023.10.24