λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Programming/Java

0000~1111 μžλ°”(JAVA) 데이터 νƒ€μž… 크기와 ν˜•λ³€ν™˜μ— λŒ€ν•΄μ„œ...

728x90
λ°˜μ‘ν˜•

μžλ°”λŠ” μ™œ μ»€ν”ΌμΌκΉŒ?

μ΅œκ·Όμ— μžλ°”(JAVA)λ₯Ό 배우고 μžˆμŠ΅λ‹ˆλ‹€.

 

기계과λ₯Ό μ „κ³΅ν•˜κ³  λ°˜λ„μ²΄ μ‚°μ—…μ—μ„œ μΌν–ˆμ—ˆκΈ° λ•Œλ¬ΈμΈμ§€ κΈ°λ³Έ CS지식에 λŒ€ν•΄μ„œ 배울 λ•Œ, ν•˜λ“œμ›¨μ–΄μ™€ κ΄€λ ¨λœ 뢀뢄이 μƒλ‹Ήνžˆ ν₯λ―Έλ‘œμ› μŠ΅λ‹ˆλ‹€.

 

ν•˜λ“œμ›¨μ–΄λ³΄λ‹€ μ†Œν”„νŠΈμ›¨μ–΄κ°€ ν•˜κ³ μ‹Άμ–΄μ„œ λ„˜μ–΄μ™”λŠ”λ° μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ°°μš°λ©΄μ„œ ν•˜λ“œμ›¨μ–΄μ— 관심이 κ°€λŠ” μ‹¬λ³΄λž€...

 

β–Ά 데이터 νƒ€μž…κ³Ό λ©”λͺ¨λ¦¬

λŒ€λΆ€λΆ„ λΉ„μŠ·ν•˜κ² μ§€λ§Œ μžλ°”μ—μ„œ 숫자 데이터 νƒ€μž…μ€ μ •μˆ˜μ™€ μ‹€μˆ˜λ‘œ λ‚˜λ‰˜λŠ”λ° 데이터 νƒ€μž…(λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” 크기)으둜 ν‘œν˜„ν•˜μžλ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

 

μ •μˆ˜ νƒ€μž… : byte(1 byte), char(2 byte), short(2 byte), int(4 byte), long(8 byte)

 

μ‹€μˆ˜ νƒ€μž… : float(4 byte), double(8 byte)

 

의미λ₯Ό μ•Œμ•„λ³Ό λ•Œ, μ •μˆ˜λ‘œ λΉ„κ΅ν•˜λ©΄ μ΄ν•΄ν•˜κΈ°κ°€ μ‰½μŠ΅λ‹ˆλ‹€.

 

λ¨Όμ € λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” 크기의 λ‹¨μœ„μΈ 1byte = 8bit (λ©”λͺ¨λ¦¬μ˜ μ΅œμ†Œ λ‹¨μœ„)

 

μš°λ¦¬κ°€ ν”νžˆ μ»΄ν“¨ν„°λŠ” 0κ³Ό 1둜 이루어진닀라고 λ§ν•˜λŠ”λ° μ •ν™•νžˆ λ§ν•˜λ©΄ μ»΄ν“¨ν„°μ˜ λ™μž‘μ€ μƒλ‹Ήμˆ˜μ˜ νŠΈλžœμ§€μŠ€ν„°μ˜ λ™μž‘μ˜ 쑰합이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

κ°„λ‹¨ν•˜κ²Œ ν•˜λ‚˜μ˜ μŠ€μœ„μΉ˜λŠ” on(1) / off(0) 2가지 λ™μž‘μ„ ν•˜λŠ”λ° μ»΄ν“¨ν„°λŠ” 이 μŠ€μœ„μΉ˜λ“€μ˜ μ‘°ν•©μœΌλ‘œ λ™μž‘μ„ ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

ν”νžˆ μš°λ¦¬κ°€ μ•„λŠ” λͺ¨μŠ€λΆ€ν˜Έμ™€ κ°™μŠ΅λ‹ˆλ‹€. 점과 μ„ μœΌλ‘œ 이루어진 λͺ¨μŠ€λΆ€ν˜Έλ₯Ό μ‘°ν•©ν•΄μ„œ λ‹€μ–‘ν•œ 단어λ₯Ό λ§Œλ“€μ–΄μ„œ λ¬Έμž₯을 μ „μ†‘ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

λͺ¨μŠ€λΆ€ν˜Έ

 

λ‹€μ‹œ λŒμ•„μ™€μ„œ 데이터 νƒ€μž…μ€ μ–Όλ§ˆλ§ŒνΌμ˜ 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμ„κΉŒ?

 

λ¨Όμ € κ°„λ‹¨ν•œ μ •μˆ˜ν˜• νƒ€μž…μΈ byte (1byte)λ₯Ό 확인해 λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

byte νƒ€μž…μ˜ 크기인 1byteλŠ” bit둜 ν‘œν˜„ν•˜λ©΄ 8bitκ°€ λ©λ‹ˆλ‹€.(1byte = 8 bit) μœ„μ—μ„œ 1bitλŠ” 0κ³Ό 1을 ν‘œν˜„ν•˜λŠ” 2가지 λ™μž‘μ„ν•  수 μžˆλ‹€κ³  ν–ˆμ£  그렇기에 1bitλŠ” 2^1개의 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

2bitλŠ” λͺ‡ 개의 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμ„κΉŒμš”? 0κ³Ό 1이 두 번 2x2 = 2^2 개λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

00 01 10 11

즉, byte νƒ€μž…μ˜ λ°μ΄ν„°λŠ” 8bit => 2^8 = 256개의 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

0000 0000 0000 0001 0000 0010 ... 1111 11101 1111 1110 1111 1111

byte :  -128 ~ 127κΉŒμ§€ ν‘œν˜„(음수λ₯Ό ν¬ν•¨ν•΄μ„œ 256개)

(byteλŠ” signed νƒ€μž… 즉, μŒμˆ˜μ™€ μ–‘μˆ˜λ₯Ό λͺ¨λ‘ κ°–λŠ” ν˜•μ‹)

 

λ‚΄κ°€ JAVAμ—μ„œ byte νƒ€μž… λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•Œ -128 ~ 127κΉŒμ§€λŠ” 였λ₯˜ 없이 μ €μž₯ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

그럼 μš°λ¦¬κ°€ 보톡 κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” intλŠ” 32bit => 2^32 = μ•½ ±2μ–΅ 1천 μ •λ„λ‘œ μƒλ‹Ήνžˆ 큰 μˆ˜κΉŒμ§€ 무리 없이 μ €μž₯ κ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

β–Ά 데이터 νƒ€μž…μ„ λ‚˜λˆ„λŠ” 이유?

 int의 데이터가 λ§Žλ‹€λ©΄ ꡳ이 데이터 νƒ€μž…μ„ λ‚˜λˆŒν•„μš”κ°€  μžˆμ„κΉŒ? κ·Έλƒ₯ intλ‚˜ 더 큰 κ²ƒμœΌλ‘œ μ‚¬μš©ν•˜λ©΄ 될 텐데?λΌλŠ” 의문이 λ“€ μˆ˜λ„ μžˆλŠ”λ° 사싀 λ°˜λ„μ²΄κ°€ 많이 λ°œμ „ν•œ μ§€κΈˆμ€ 많이 λŠμŠ¨ν•΄μ‘Œμ„μ§€ λͺ¨λ₯΄μ§€λ§Œ, 산업기계에 ν¬ν•¨λ˜μ–΄μžˆλŠ” λ©”λͺ¨λ¦¬λŠ” κ·Έ 크기가 μ•„μ£Ό μž‘μ•„μ„œ λ‚΄μž₯된 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ΅œλŒ€ν•œ 효율적으둜 λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€.

 

즉, λ©”λͺ¨λ¦¬λŠ” μ•„λ‚„μˆ˜λ‘ μ’‹λ‹€. μš©λŸ‰ 쀄일 수 있으면 μ’‹μœΌλ‹ˆκΉŒ...

 

β–Ά μžλ°”μ—μ„œμ˜ ν˜•λ³€ν™˜

 μ‚¬μ‹€ 개인적으둜 이 뢀뢄이 μƒλ‹Ήνžˆ μž¬λ―Έμžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆμ„ λ‹Ήμ‹œμ— μ •μ˜ν–ˆλ˜ 데이터 νƒ€μž…μ„ 쀑간에 "ν˜• λ³€ν™˜"μ΄λΌλŠ” νˆ΄μ„ μ΄μš©ν•΄μ„œ λ³€ν™”μ‹œν‚¬ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

ex): byte λ°μ΄ν„° νƒ€μž…μœΌλ‘œ μ„ μ–Έν•œ λ³€μˆ˜ a의 λ²”μ£Όλ₯Ό λ²—μ–΄λ‚˜λŠ” 값을 κ°•μ œ ν˜•λ³€ν™˜

>>> byte a;

>>> a = (int) 500;

μ΅œλŒ€ 127κΉŒμ§€μ˜ 숫자만 담을 수 μžˆμ—ˆλ˜ byte λ³€μˆ˜κ°€ κ°•μ œ ν˜• λ³€ν™˜μ„ ν†΅ν•΄μ„œ 500 값을 κ°€μ§€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€?

 

사싀 좜λ ₯ν–ˆμ„ λ•Œ μ—‰λš±ν•œ 값이 λ‚˜μ˜€κ²Œ λ©λ‹ˆλ‹€.

500은 byte 데이터 ν˜•μ‹μ˜ ν‘œν˜„ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λŠ” 값이기 λ•Œλ¬Έμ— 더 큰 데이터 νƒ€μž…μ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

 

μž‘μ€ 틀에 큰 κ°’ ν• λ‹Ήν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

그럼 λ°˜λŒ€μ˜ κ²½μš°λŠ”?

 

byte -> int처럼 μž‘μ€ 값을 큰 데이터 νƒ€μž… ν˜•μ‹μ˜ 틀에 λ‹΄λŠ” 것은 였λ₯˜ 없이 μ§„ν–‰λ©λ‹ˆλ‹€.

 

β–Ά μ •μˆ˜ -> μ‹€μˆ˜

 

μ‹€μ œ μ„Έμƒμ—μ„œ μ‚¬μš©λ˜λŠ” 값은 μ •μˆ˜λ³΄λ‹€ μ‹€μˆ˜κ°€ 더 λ§Žμ€ 비쀑을 μ°¨μ§€ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ μš°λ¦¬λŠ” κ°„λ‹¨ν•˜κ²Œ μ •μˆ˜λ₯Ό μž…λ ₯λ°›κ³  μ‹€μˆ˜λ‘œ λ°˜ν™˜ν•΄μ•Ό ν•  λ•Œκ°€ λ§Žμ„ 텐데 μ΄λ•Œλ„ ν˜• λ³€ν™˜μ„ μ‚¬μš©μ΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 

>>> int height = 180;

>>> int weigth = 75;

>>> float rate = (float) height / weight;

 

μ—¬κΈ°μ„œ int (8 byte) -> float (4 byte)의 ν˜• λ³€ν™˜μ΄ μ΄λ€„μ§‘λ‹ˆλ‹€.

 

μ •μˆ˜λ§Œ 봀을 λ•Œ, 더 큰 데이터 ν˜•μ‹μ΄ μž‘μ€ 데이터 ν˜•μ‹μœΌλ‘œ ν˜• λ³€ν™˜μ΄ μ΄λ€„μ§€λŠ” 것이 잘λͺ»λœ κ²ƒμ²˜λŸΌ 보일 수 μžˆμœΌλ‚˜,

μ‹€μ œλ‘œ 데이터 νƒ€μž…μ˜ λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•˜λŠ” 크기가 μ•„λ‹Œ 숫자λ₯Ό ν‘œν˜„ν•˜λŠ” λ²”μœ„κ°€ μ€‘μš”ν•©λ‹ˆλ‹€.

 

float이 int보닀 더 λ§Žμ€ 숫자λ₯Ό ν‘œν˜„ν•  수 μžˆλŠ” 넓은 λ²”μœ„λ₯Ό 가지고 있기 λ•Œλ¬Έμ— ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•œ κ²ƒμž…λ‹ˆλ‹€.

 

μ‹€μˆ˜μ— λ²”μœ„μ— λŒ€ν•œ 뢀뢄은 μ°¨ν›„ μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

 

ν‰μ†Œμ— λ³€μˆ˜λ₯Ό ν• λ‹Ήν•  λ•Œ, 데이터와 λ©”λͺ¨λ¦¬μ— λŒ€ν•œ 생각을 ν•˜λ©΄μ„œ 쑰금 더 효율적인 방법을 μ°Ύμ•„κ°€μ•Ό 될 λ“―ν•©λ‹ˆλ‹€.


잘λͺ»λœ 뢀뢄이 있으면 ν”Όλ“œλ°± μ£Όμ‹œλ©΄ κ°μ‚¬ν•©λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•