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

[Java] Primitive type vs Reference type

by dar0m! 2021. 4. 18.

๊ธฐ๋ณธํ˜•(Primitive type)

  • ์ด 8๊ฐ€์ง€์˜ ๊ธฐ๋ณธํ˜• ํƒ€์ž…(Primitive type)์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค.
  • ๋น„๊ฐ์ฒด, Null์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
  • ์‹ค์ œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
  • ๋ฌธ๋ฒ•์ƒ ์—๋Ÿฌ → ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ

 


 

ํƒ€์ž…

ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ

๊ธฐ๋ณธ๊ฐ’

๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„ ๋ฒ”์œ„

 

 ๋…ผ๋ฆฌํ˜•

 boolean

 1 byte

 false

 true, false

 

 ์ •์ˆ˜ํ˜•

 byte

 1 byte

 0

 -128 ~ 127

 short

 2 byte

 0

 -32,768 ~ 32,767

 int(๊ธฐ๋ณธ)

 4 byte 

 0

 -2,147,483,648 ~ 2,147,483,647

 long

 8 byte

 0L

 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

 ์‹ค์ˆ˜ํ˜•

 float

 4 byte

 0.0F

 (3.4 X 10-38) ~ (3.4 X 1038) ์˜ ๊ทผ์‚ฌ๊ฐ’

 double(๊ธฐ๋ณธ)

 8 byte

 0.0  (1.7 X 10-308) ~ (1.7 X 10308) ์˜ ๊ทผ์‚ฌ๊ฐ’

 

 ๋ฌธ์žํ˜•

 char

 2 byte (์œ ๋‹ˆ์ฝ”๋“œ)

 '\u0000' 

 0 ~ 65,535

์ฐธ์กฐํ˜•(Reference type)

  • ๊ธฐ๋ณธํ˜• ํƒ€์ž…์„ ์ œ์™ธํ•œ ํƒ€์ž…์€ ๋ชจ๋‘ ์ฐธ์กฐํ˜• ํƒ€์ž…
  • ๊ฐ์ฒดํ˜•, Null์กด์žฌ
  • ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ์˜ ์ฃผ์†Œ๊ฐ’์„ ์Šคํƒ์—, ์‹ค์ œ ๊ฐ’์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
  • ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
    • ex) NullPointException

 ํƒ€์ž…

์˜ˆ์‹œ

 ๊ธฐ๋ณธ๊ฐ’

ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ 

 ๋ฐฐ์—ด(Array)

 int[] arr = new int[5];

 Null

 4 byte (๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’)

 ์—ด๊ฑฐ(Enumeration)

 

 Null

 ํด๋ž˜์Šค(Class)

 String str = "test";

 Student sujin = new Student();

 Null

 ์ธํ„ฐํŽ˜์ด์Šค(Interface) 

 

 Null

 

Wrapper Class

๊ธฐ๋ณธํ˜•์— Null์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด ๋ž˜ํผ ํด๋ž˜์Šค(Wrapper Class)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฐธ์กฐํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธํ˜•์„ ํด๋ž˜์Šค๋กœ ๊ฐ์‹ผ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธํ˜•  ๋Œ€์‘ ๋ž˜ํผ ํด๋ž˜์Šค 
byte  Byte 
short  Short 
int  Integer 
long  Long 
float  Float 
double  Double 
char  Char 
boolean  Boolean

๊ธฐ๋ณธํ˜•, ์ฐธ์กฐํ˜• ๊ฐ„ ๋ณ€ํ™˜ํ•  ๋•Œ, ๊ธฐ๋ณธํ˜•์—์„œ Wrapper Class๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฐธ์กฐํ˜•์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ˜•ํƒœ๋ฅผ Boxing, ๊ทธ ๋ฐ˜๋Œ€๋ฅผ Unboxing์ด๋ผ๊ณ  ํ•œ๋‹ค. 

  • Boxing : ๊ธฐ๋ณธํ˜• → (Wrapper Class) ์ฐธ์กฐํ˜•
  • Unboxing : ์ฐธ์กฐํ˜• (Wrapper ํด๋ž˜์Šค) → ๊ธฐ๋ณธํ˜•

์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋™์ ์œผ๋กœ ์ผ์–ด๋‚˜ AutoBoxing, AutoUnBoxing ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

ํŠน์ง•

์™œ ์ฐธ์กฐํ˜•์ด ํ•„์š”ํ• ๊นŒ?

  1. Null์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์ œ๋„ค๋ฆญ ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์›์‹œ ํƒ€์ž…์˜ ์žฅ์ ์€?

  • ์ ‘๊ทผ ์†๋„

์›์‹œ ํƒ€์ž…์€ '์Šคํƒ' ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค.
๋ฐ˜๋ฉด ์ฐธ์กฐ ํƒ€์ž…์€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— '์Šคํƒ' ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์ฐธ์กฐ๊ฐ’๋งŒ ์žˆ๊ณ , ์‹ค์ œ ๊ฐ’์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ’์„ ํ•„์š”๋กœ ํ•  ๋•Œ๋งˆ๋‹ค ์–ธ๋ฐ•์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋‹ˆ ์›์‹œ ํƒ€์ž…๊ณผ ๋น„๊ตํ•ด์„œ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
(์˜ˆ์™ธ์ ์œผ๋กœ ์—„์ฒญ ํฐ ์ˆซ์ž๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์ฐธ์กฐ๊ฐ’๋งŒ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค.)

  • ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘
์›์‹œํƒ€์ž…์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐํƒ€์ž…์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ
boolean - 1bit Boolean – 128 bits
byte - 8bits Byte - 128bits
short, cagr - 16bits Short, Charater - 128bits
int, float - 32bits Integer, Float - 128bits
long, double - 64bits Long, Double - 196bits

๊ฒฐ๋ก 

์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ์— ์žฅ์ ์ด ์žˆ๋Š” ์›์‹œ ํƒ€์ž…์„ ๋จผ์ € ๊ณ ๋ คํ•œ๋‹ค. ๋งŒ์•ฝ Null์„ ๋‹ค๋ค„์•ผ ํ•˜๊ฑฐ๋‚˜, ์ œ๋„ค๋ฆญ ํƒ€์ž…์—์„œ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ฐธ์กฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ฐธ์กฐ

 

๋Œ“๊ธ€