본문 바로가기
IT/JAVA

[basic] 자료형, 형변환

by for-learn 2024. 9. 28.
JAVA 자료형

기본자료형은 8개, 최소단위는 byte(256: -128 ~ 0 ~ 127)

 

기본자료형은 크게 숫자로 볼수있다.

(문자 char 는 아스키코드로 숫자로 치환 가능)

정수는 int가 기본

실수는 double이 기본

문자는 2byte(한글을 표현하기 위해)

문자열은 자료형이 아닌 class 이다. (배열이라고 할수 있음)

※표 암기!(표현범위 제외)※

자료형 키워드 크기(byte) 기본값 표현범위
논리 boolean 1 false false, true
문자 char 2 \u0000 (공백) 0 ~ 65,535
정수 byte 1 0 -128 ~ 0 ~ 127
short 2 0 -32,768 ~ 32,767
int 4 0 -2,147,483,648 ~ 2,147,483,647
long 8 0
-9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
실수 float 4 0.0f -3.4E38 ~ +3.4E38
double 8 0.0 -1.7E308 ~ +1.7E308

 

기타:

스위프트는 int만 사용한다.

(int8 int32 이런식으로 byte크기를 지정해서 사용한다.)

c#의 int는 8byte

 

현재 우리가 사용하는 컴퓨터는 64비트 운영체제

80년대 초반부에는 8비트로 시작했고,

윈도우즈95 16비트 (이때의 int가 현재의 short)

2000년대 32비트 (현재의 int가 int, 과거의 int가 short)

그 이후 덩치를 늘릴 필요가 없다고 생각해서 int를 기본으로 사용.

 

64비트에서 변수 short(2byte)가 들어오면 64비트 컨테이너를 16비트만 사용한다.

long일때는 64비트 모두 사용한다.

 

배열은 64비트로 담기지 않아서 주소체계를 사용한다.

정수

byte, short, int, long

var a = 10;

java버전이 17이여서 변수var가 사용됨 => 실무에서는 사용x

byte a = 10; //변수 선언 및 초기화
//a = 123.456; 
  자료형과 대입값이 일치해야한다.
//a = true; 
  java는 1,0으로 true false를 구분하지 못한다.
//a = "문어회"
  문자열은 당연히 안됨
a = 'a'; //값: 97
  아스키코드로 인식해 숫자로 값이 대입된다. 
a = 127;
//a = 128;
  byte는 -128~127까지이기 때문에 안됨.
short s = 20;
int i = 30;
i = 2147483647; 
//i = 2147483648; 안됨
long lo = 40;
lo = 2147483647;
lo = 2147483648L;

정수는 int가 기본이여서 int값 이상인 자료형 long을 입력하려면 숫자 뒤에 'L'을 입력해야 한다.

실수

float, double

double dd = 123.456;
dd = 1234;
float ff = 123.456f;

실수는 double이 기본이여서 float은 숫자 뒤에 'f'를 입력해야 한다.

논리

boolean 기본값 false

boolean bo = true;
//bo = "true"; 문자열
//bo = 0; 숫자
bo = false;

문자열이나 숫자를 논리형에 대입할 수 없다.

문자

char

char ch = 'a';
//ch = "아"; 
쌍따옴표 사용 안됨
ch = 100;
아스키코드로 받아들임

 

문자열

String

문자열 String 기본자료형이 아니고 class임

class인 증거? => String 앞글자를 대문자로 입력해야함.

String str = "나는 문자열";

 

형변환

up casting / down casting

up casting
= 묵시적 형변환
= 자동 형변환
그냥 형변환 해도 문제 없음.
down casting
= 명시적 형변환
= 강제 형변환
형변환할 자료형을 정확히 지정해야함

 

up casting

묵시적 / 자동

정수 → 정수

byte를 short에 대입

a = 100; //byte
s = a; //short <= byte

결과 => a:100, s:100

 

정수 → 실수

int를 double에 대입

i = 1234;
dd = i; //double <= int

결과 => i:1234, dd:1234.0

문자 → 정수

ch = 's';
i = ch;

결과 => ch:s, i:115 (아스키코드)

down casting

명시적 / 강제

정수 → 정수

short를 byte에 대입

s = 50;
a = (byte)s; //byte <= short

결과 => s:50 a:50

s = 130;
a = (byte)s; //byte <= short

 

결과 => s:130 a:-126

(short) 130 => 0000 0000 1000 0010

(byte) -126 => 1000 0010

over되는 값이 짤리고 나머지 값을 보여줌

표현 범위가 2byte에서 1byte로 줄어들면서 byte기준 2진수의 맨 왼쪽의 숫자가 1이됨 (0:양수, 1:음수)

byte는 -128(음수) ~ 0 ~ 127(양수) 까지 표현가능

s = 254;
a = (byte)s; //byte <= short

결과 => s:254 a:-2

+ 추가

(short) 256 => 0000 0001 0000 0000

(short) 512 => 0000 0010 0000 0000

(short) 1,024 => 0000 0100 0000 0000

(byte) 0 => 0000 0000

실수 → 정수

실수에서 정수로 가면 소수점은 잘라버린다.

dd = 123.456;
i = (int)dd; //int <= double

결과 => dd:123.456, i:123

정수 → 문자 (문자 → 정수 : up casting)

char: 2byte, int: 4byte

i = 100;
ch = (char)ch;

결과 => i:100, ch:d (아스키코드)

 

인코딩 에러 이유

 

bit                                                                              byte

                                             BCD         ASCII             EBCDIC

1         2     3       4      5       6               7                   8

2         4     8     16     32      64           128                256

-----------------------------------------------------------------------

0(off)  00  000                    a~z   26   62 +               128 + 부호(0:양수)

1(on)  01  001                    A~Z  26    특수문자 33                     (1:음수)

           10  010                    0~9  10    제어문자 33

           11  011                           ------               ------

                 100                             62                 128

                 101

                 110

                 111

BCD 2진화 10진법

ASCII 아스키코드

 

 

 

[정보통신기술용어해설]

  ㅇ 한편, 8번째 비트는, 
     - 에러 검출 방식으로 사용되거나, 
     - 때론, 비 영어권에서 문자 표현 확대를 위해 사용하기도 함

 

자료 | 1byte 정보(데이터)

한글은 2byte로 표현하는데, 데이터 전송시 나뉘어서 전송되고 인코딩으로 결합하는 것임.

이때 잘못 결합되면 오류. 이 오류를 컴퍼팅(변수를 이용해서로)으로 고칠 수있는데,

변수명이 한글이면 컴퍼팅도 못함………

현재는 기본 UTF-8 파일로 되어있다

응용소프트웨어 byte

네트워크 암호 bit

자바스크립트 calc