โ˜• Backend/Java

[Java] ๋ž˜ํผ ํด๋ž˜์Šค(Wrapper Class)

devCloud 2026. 4. 28. 11:11
728x90

๐Ÿ“ฆ ์ž๋ฐ” ๋ž˜ํผ ํด๋ž˜์Šค(Wrapper Class): ์บ์‹ฑ๊ณผ ์˜คํ† ๋ฐ•์‹ฑ ์›๋ฆฌ ์ด์ •๋ฆฌ

1. ์ž๋ฐ” ๋ž˜ํผ ํด๋ž˜์Šค(Wrapper Class)๋ž€?

์ž๋ฐ”์—๋Š” int, char, double๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ํƒ€์ž…(Primitive Type)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ด ๊ธฐ๋ณธ ํƒ€์ž…๋“ค์„ '๊ฐ์ฒด'๋กœ ๋‹ค๋ค„์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ธ ArrayList์— ์ €์žฅํ•  ๋•Œ). ์ด๋•Œ ๊ธฐ๋ณธ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ๋Š”(Wrapping) ํด๋ž˜์Šค๋ฅผ ๋ž˜ํผ ํด๋ž˜์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… ๊ธฐ๋ณธ ํƒ€์ž… → ๋ž˜ํผ ํด๋ž˜์Šค ๋งค์นญ

byte → Byte short → Short int → Integer long → Long
float → Float double → Double char → Character boolean → Boolean

2. ์ž๋ฐ” ๋ž˜ํผ ํด๋ž˜์Šค ์บ์‹ฑ (Wrapper Class Caching)

(1) ์บ์‹ฑ์˜ ๊ฐœ๋…

์ž๋ฐ”์˜ ๋ž˜ํผ ํด๋ž˜์Šค๋Š” ํŠน์ • ๋ฒ”์œ„ ๋‚ด์˜ ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ, ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

(2) ํด๋ž˜์Šค๋ณ„ ์บ์‹ฑ ์ง€์› ์—ฌ๋ถ€ ๋ฐ ๋ฒ”์œ„

  • ์บ์‹ฑ ์ง€์›
    • Boolean: true์™€ false ์ „์ฒด.
    • Byte: -128 ~ 127 (์ „ ๋ฒ”์œ„).
    • Character: 0 ~ 127 (์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฒ”์œ„).
    • Short, Integer, Long: ๊ธฐ๋ณธ์ ์œผ๋กœ -128 ~ 127 ๋ฒ”์œ„.
  • ์บ์‹ฑ ๋ฏธ์ง€์›: Float, Double (์‹ค์ˆ˜๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋ฌดํ•œ๋Œ€์— ๊ฐ€๊นŒ์›Œ ์บ์‹ฑ ํšจ์œจ์ด ๋–จ์–ด์ง).

(3) ์บ์‹ฑ ๋™์ž‘ ์กฐ๊ฑด ๋ฐ ํŠน์ˆ˜ ๊ธฐ๋Šฅ

  • valueOf() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: ์บ์‹ฑ์€ valueOf() ํ˜ธ์ถœ ์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜คํ† ๋ฐ•์‹ฑ ์‹œ์—๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์บ์‹ฑ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์˜์‚ฌํ•ญ: new Integer(100)์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ์บ์‹ฑ๋˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ƒˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Integer ๋ฒ”์œ„ ํŠœ๋‹: JVM ์˜ต์…˜ -XX:AutoBoxCacheMax=<size>๋ฅผ ํ†ตํ•ด ์บ์‹ฑ ์ตœ๋Œ€๊ฐ’์„ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: 1000 ์„ค์ • ์‹œ 500๋„ ๋™์ผ ๊ฐ์ฒด ์ทจ๊ธ‰)

3. ์˜คํ† ๋ฐ•์‹ฑ(Autoboxing) & ์–ธ๋ฐ•์‹ฑ(Unboxing)

  • ์˜คํ† ๋ฐ•์‹ฑ: ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์„ ๋ž˜ํผ ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ์ž๋™ ๋ณ€ํ™˜ (์˜ˆ: int → Integer)
  • ์–ธ๋ฐ•์‹ฑ: ๋ž˜ํผ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ’์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ (์˜ˆ: Integer → int)

โš™๏ธ ๋™์ž‘ ์›๋ฆฌ (๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜ ๋น„๋ฐ€)

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.
- ์˜คํ† ๋ฐ•์‹ฑ: Integer.valueOf() ํ˜ธ์ถœ ์ฝ”๋“œ ์ถ”๊ฐ€
- ์–ธ๋ฐ•์‹ฑ: intValue(), longValue() ๋“ฑ ํ˜ธ์ถœ ์ฝ”๋“œ ์ถ”๊ฐ€


4. ์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ์„ฑ๋Šฅ ์ด์Šˆ

โš ๏ธ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด(Immutable)์ž…๋‹ˆ๋‹ค. ์—ฐ์‚ฐ ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

โŒ ๋‚˜์œ ์˜ˆ์‹œ (์„ฑ๋Šฅ ์ €ํ•˜)
Integer sum = 0;
for (int i = 0; i < 1000; i++) {
    sum += i; 
    // ์–ธ๋ฐ•์‹ฑ -> ์—ฐ์‚ฐ -> ์˜คํ† ๋ฐ•์‹ฑ ๋ฐœ์ƒ
    // 1000๊ฐœ์˜ ๊ฐ์ฒด ์ƒ์„ฑ!
}
โœ… ์ข‹์€ ์˜ˆ์‹œ (๊ถŒ์žฅ)
int sum = 0; 
for (int i = 0; i < 1000; i++) {
    sum += i;
}
// ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ 
// ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์—ฐ์‚ฐ

โš–๏ธ ๋น„๊ต ์—ฐ์‚ฐ ์ฃผ์˜ (== vs .equals())

  • ๋ž˜ํผ ํด๋ž˜์Šค ๊ฐ„ == ๋น„๊ต: ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์บ์‹ฑ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๊ฐ’์ด ๊ฐ™์•„๋„ false๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ .equals()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ์˜ ๋น„๊ต: ํ•œ์ชฝ์ด ๊ธฐ๋ณธ ํƒ€์ž…์ด๋ฉด ์ž๋™์œผ๋กœ ์–ธ๋ฐ•์‹ฑ๋˜์–ด ๊ฐ’ ๋น„๊ต๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. (true ๋ฐ˜ํ™˜)

5. ์ถ”๊ฐ€ ๊ฐœ๋…: ์‹ ํƒ์Šค ์Šˆ๊ฐ€ (Syntax Sugar)

์˜คํ† ๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์€ ์ž๋ฐ”์˜ ๋Œ€ํ‘œ์ ์ธ ์‹ ํƒ์Šค ์Šˆ๊ฐ€์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋„๋ก ๋•์ง€๋งŒ, ๋‚ด๋ถ€ ๋™์ž‘์„ ๋ชจ๋ฅด๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์„คํƒ•์ด ์–ด๋–ป๊ฒŒ ๋…น์•„ ๋“ค์–ด๊ฐ€๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค."

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Integer num = 10;์„ Integer.valueOf(10);์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ์•Œ์•„์•ผ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ง‰๋Š” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: ์ž๋ฐ” ๋ž˜ํผ ํด๋ž˜์Šค ์บ์‹ฑ ๋ฐ ์˜คํ† ๋ฐ•์‹ฑ ์›๋ฆฌ ์ •๋ฆฌ ๊ฐ€์ด๋“œ

728x90