๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’กCS/Java

์›์‹œ ํƒ€์ž…(Primitive), ์ฐธ์กฐ ํƒ€์ž…(Reference)

by hyeon-z 2023. 6. 7.

 
์›์‹œ ํƒ€์ž…, ๊ธฐ๋ณธํ˜•(Primitive Type)

 
๐Ÿ‘† ํŠน์ง•
- ์ด 8๊ฐ€์ง€์˜ ํƒ€์ž… ์กด์žฌ
- ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
- ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
- ๋น„๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ Primitive type์— Null์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด Wrapper Class๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
- Stack์— ์ €์žฅ๋œ๋‹ค.
 
๐Ÿ‘† ์ข…๋ฅ˜
- ๋…ผ๋ฆฌํ˜• (boolean): true์™€ false ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง
- ๋ฌธ์žํ˜• (char): ํ•˜๋‚˜์˜ ๋ฌธ์ž๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ
- ์ •์ˆ˜ํ˜• (byte, short, int, long)
- ์‹ค์ˆ˜ํ˜• (float, double)

  1byte (8bit) 2byte (16bit) 4byte (32bit) 8byte (64bit)
๋…ผ๋ฆฌ ํ˜• boolean      
๋ฌธ์ž ํ˜•   char    
์ •์ˆ˜ ํ˜• byte short int long
์‹ค์ˆ˜ ํ˜•     float double

๊ฐ’์˜ ๋ฒ”์œ„:  -2^n-1 ~ 2^n-1 -1 (n์€ bit ์ˆ˜)

 

๋…ผ๋ฆฌํ˜• - boolean

 

true, false๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ false์ด๋‹ค.
์ž๋ฐ”๋Š” ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๊ตฌ๋ณ„๋˜๊ธฐ ๋•Œ๋ฌธ์— True, False๋Š” ๋ถˆ๊ฐ€๋Šฅ
 
์‹ค์ œ๋กœ๋Š” 1bit๋ฉด ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ตœ์†Œ ๋‹จ์œ„๊ฐ€ 1byte์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ 1byte์ด๋‹ค.
 

๋ฌธ์žํ˜• - char

 
๋‹จ ํ•˜๋‚˜์˜ ๋ฌธ์ž ๋งŒ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

char ch = 'A';
char ch = 65;

char ch = 'A';๋Š” ๋ณ€์ˆ˜์— ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์‚ฌ์‹ค์€ ๋ฌธ์ž์˜ ์œ ๋‹ˆ์ฝ”๋“œ(์ •์ˆ˜)๊ฐ€ ์ €์žฅ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ์œ„์˜ ๋‘ ๋ฌธ์žฅ์€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค.
 

์ •์ˆ˜ํ˜• (byte, short, int, long)

 
๐Ÿ’ก byte(1) < short(2) < int(4) < long(8)

โญ byte
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ : 1byte (8bit)
์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ : -128 ~ 127

1byte(8bit)์˜ ๊ณต๊ฐ„ ์ค‘ ๊ฐ€์žฅ ์ขŒ์ธก์˜ ์ตœ์ƒ์œ„๋น„ํŠธ(๋ถ€ํ˜ธ๋น„ํŠธ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ 7๊ฐœ์˜ ๋น„ํŠธ์— 0๊ณผ 1๋กœ ์ด์ง„์ˆ˜ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ€์žฅ ์ขŒ์ธก์˜ ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ 0์ด๋ฉด ์–‘์ˆ˜๋กœ, 1์ด๋ฉด ์Œ์ˆ˜๋กœ ์ธ์‹ํ•œ๋‹ค.
โญ short

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ : 2byte(16bit)
์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ : -32,768 ~ 32,767

JVM์˜ ํ”ผ์—ฐ์‚ฐ์ž ์Šคํƒ(Operand Stack)์ด ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ 4Byte ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ 4byte๋ณด๋‹ค ์ž‘์€ ์ž๋ฃŒํ˜•(byte, short)์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ๋Š” 4byte๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์˜คํžˆ๋ ค intํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๋‹ค.
โญ long

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ : 8byte(64bit)
์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

long ํƒ€์ž…์€ int ํƒ€์ž…์˜ ์ €์žฅ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์ˆ˜์น˜๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

์‹ค์ˆ˜ํ˜• (float, double)

 

โญ float

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ : 4Byte(32bit)
์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ : -3.4E+38 ~ 3.4E+38

์‹ค์ˆ˜๋Š” ์ •์ˆ˜์™€ ๋‹ฌ๋ฆฌ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
์‹ค์ˆ˜ ํƒ€์ž… float, double์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์€ ๊ฐ๊ฐ ์ •์ˆ˜ ํƒ€์ž… int, long๊ณผ ๊ฐ™์ง€๋งŒ, ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ๋˜์–ด ๋” ํฐ ๋ฒ”์œ„์˜ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
์ž๋ฐ”์—์„œ ์‹ค์ˆ˜์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ doubleํ˜•์ด๋ฏ€๋กœ floatํ˜•์—๋Š” ์•ŒํŒŒ๋ฒณ F๋ฅผ ๋ถ™์—ฌ์„œ float ํ˜•์ž„์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โญ double

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํฌ๊ธฐ : 8byte(64bit)
์ €์žฅ๋˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„ : -1.7E+308 ~ 1.7E+308

float ํƒ€์ž…์€ ์†Œ์ˆ˜์  ์•„๋ž˜ 9์ž๋ฆฌ๊นŒ์ง€๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, double ํƒ€์ž…์€ ์†Œ์ˆ˜์  ์•„๋ž˜ 18์ž๋ฆฌ ๊นŒ์ง€ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ด ์ข€ ๋” ์ •๋ฐ€ํ•œ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ฐธ์กฐ ํƒ€์ž…(Reference Type)
 
๐Ÿ‘† ํŠน์ง•

- ๊ฐ์ฒด(Object)์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
- 8๊ฐœ์˜ ๊ธฐ๋ณธํ˜•์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํƒ€์ž…
-  JAVA์—์„œ ์ตœ์ƒ์ธ java.lang.Objectํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์„ ๋งํ•œ๋‹ค. new๋กœ ์ธํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Heap ์˜์—ญ์— ์ƒ์„ฑ์„ ํ•˜๊ฒŒ ๋˜๊ณ , Garbage Collector๊ฐ€ ๋Œ๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.
- ํด๋ž˜์Šค ํƒ€์ž…(class type) , ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…(interface type) , ๋ฐฐ์—ด ํƒ€์ž…(array type) , ์—ด๊ฑฐ ํƒ€์ž…(enum type)์ด ์žˆ๋‹ค.
- ๋นˆ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” null์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
- ๋ฌธ๋ฒ•์ƒ์œผ๋กœ๋Š” ์—๋Ÿฌ๊ฐ€ ์—†์ง€๋งŒ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ null ๊ฐ’์œผ๋กœ ๋ฐ›์œผ๋ฉด NullPointException์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.
- Heap ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋Š” ๋ฉ”์„œ๋“œ๋‚˜ ๊ฐ์ข… ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด JVM์˜ Stack ์˜์—ญ์— ์กด์žฌํ•˜๋Š” Frame์— ์ผ์ข…์˜ ํฌ์ธํ„ฐ(C์˜ ํฌ์ธํ„ฐ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.)์ธ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ด๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ธ๋“ค๋งํ•ฉ๋‹ˆ๋‹ค.

 
๊ธฐ๋ณธํ˜•์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๊ธ€์„ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

2-4์žฅ ๊ธฐ๋ณธํ˜•

1. ๋…ผ๋ฆฌํ˜• - boolean true, false๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ’์€ false์ด๋‹ค. ์ž๋ฐ”๋Š” ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ๊ตฌ๋ณ„๋˜๊ธฐ ๋•Œ๋ฌธ์— True, False๋Š” ๋ถˆ๊ฐ€๋Šฅ 2. ๋ฌธ์žํ˜• - char ๋‹จ ํ•˜๋‚˜์˜ ๋ฌธ์ž ๋งŒ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. char ch = 'A'; char ch =

hyeon-z.tistory.com

 
Reference
Primitive type & Reference type

๋Œ“๊ธ€