๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/Java

[Java] Wrapper ํด๋ž˜์Šค - ๊ธฐ๋ณธํ˜•์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ!

by hyebin (Helia) 2025. 5. 21.
๋ฐ˜์‘ํ˜•

 


๋ชฉ์ฐจ

     

     

    Java๋Š” ๊ธฐ๋ณธํ˜•(primitive type)๊ณผ ์ฐธ์กฐํ˜•(reference type)์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์ปฌ๋ ‰์…˜์ด๋‚˜ ์ œ๋„ค๋ฆญ์ฒ˜๋Ÿผ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋œ Java์˜ ๊ตฌ์กฐ ์†์—์„œ๋Š” ๊ธฐ๋ณธํ˜•๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

     

    ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Wrapper ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

     

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Wrapper ํด๋ž˜์Šค์˜ ๊ฐœ๋…, ๋ณ€ํ™˜(๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ), ๊ทธ๋ฆฌ๊ณ  ํ™œ์šฉ๋ฒ•๊นŒ์ง€ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


    ๐ŸŽ Wrapper ํด๋ž˜์Šค๋ž€?

    Wrapper ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ํฌ์žฅํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด, int ๊ฐ’์„ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด Integer๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ๊ธฐ๋ณธํ˜• Wrapper ํด๋ž˜์Šค
    boolean Boolean
    byte Byte
    char Character
    short Short
    int Integer
    long Long
    float Float
    double Double

     

    ์™œ Wrapper ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ• ๊นŒ?

    • ์ œ๋„ค๋ฆญ(Generic) ์€ ๊ฐ์ฒด ํƒ€์ž…๋งŒ ํ—ˆ์šฉ → ๊ธฐ๋ณธํ˜• ๋ถˆ๊ฐ€
    • ์ปฌ๋ ‰์…˜(Collection) ์€ ๊ฐ์ฒด๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ
    • null ํ‘œํ˜„์ด ๊ฐ€๋Šฅ → ๊ธฐ๋ณธํ˜•์€ null์„ ๋‹ด์„ ์ˆ˜ ์—†์Œ
    • ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์  ๊ธฐ๋Šฅ ์ œ๊ณต

    ๐Ÿ“ฆ ๋ฐ•์‹ฑ(Boxing)๊ณผ ์–ธ๋ฐ•์‹ฑ(Unboxing)

    ๋ฐ•์‹ฑ(Boxing)

    ๋ฐ•์‹ฑ์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๊ฐ’์„ ํ•ด๋‹นํ•˜๋Š” Wrapper ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

    // ์ˆ˜๋™ ๋ฐ•์‹ฑ
    Integer wrappedInt = Integer.valueOf(10);
    
    // ์ž๋™ ๋ฐ•์‹ฑ(Auto-boxing) - Java 5๋ถ€ํ„ฐ ์ง€์›
    Integer autoBoxed = 10;  // ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ Integer.valueOf(10)์œผ๋กœ ๋ณ€ํ™˜

     

    ์–ธ๋ฐ•์‹ฑ(Unboxing)

    ์–ธ๋ฐ•์‹ฑ์€ Wrapper ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

    // ์ˆ˜๋™ ์–ธ๋ฐ•์‹ฑ
    int primitiveInt = wrappedInt.intValue();
    
    // ์ž๋™ ์–ธ๋ฐ•์‹ฑ(Auto-unboxing) - Java 5๋ถ€ํ„ฐ ์ง€์›
    int autoUnboxed = wrappedInt;  // ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ wrappedInt.intValue()๋กœ ๋ณ€ํ™˜

    ๐Ÿ”ง ์ฃผ์š” ๊ธฐ๋Šฅ ์ •๋ฆฌ

    1. ํ˜•๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ

    // ๋ฌธ์ž์—ด -> ๊ธฐ๋ณธํ˜•
    int i = Integer.parseInt("100");
    double d = Double.parseDouble("3.14");
    boolean b = Boolean.parseBoolean("true");
    
    // ๊ธฐ๋ณธํ˜• -> ๋ฌธ์ž์—ด
    String s1 = Integer.toString(100);
    String s2 = Double.toString(3.14);
    String s3 = Boolean.toString(true);

    2. ๊ฐ’ ๋น„๊ต ๋ฉ”์„œ๋“œ

    Integer num1 = 10;
    Integer num2 = 20;
    
    int comparison = num1.compareTo(num2);  // -1 (num1 < num2)

    3. ์ƒ์ˆ˜ ํ•„๋“œ

    int max = Integer.MAX_VALUE;  // 2147483647
    int min = Integer.MIN_VALUE;  // -2147483648
    int bits = Integer.SIZE;      // 32 (bit)
    int bytes = Integer.BYTES;    // 4 (byte)

    4. ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ

    // 2์ง„์ˆ˜, 8์ง„์ˆ˜, 16์ง„์ˆ˜ ๋ณ€ํ™˜
    String binary = Integer.toBinaryString(10);    // "1010"
    String octal = Integer.toOctalString(10);      // "12"
    String hex = Integer.toHexString(10);          // "a"
    
    // ์ตœ๋Œ€๊ฐ’, ์ตœ์†Œ๊ฐ’ ์ฐพ๊ธฐ
    int max = Integer.max(10, 20);                // 20
    int min = Integer.min(10, 20);                // 10
    
    // ๋ถ€ํ˜ธ ๊ด€๋ จ
    int sign = Integer.signum(-10);                // -1 (์Œ์ˆ˜๋Š” -1, 0์€ 0, ์–‘์ˆ˜๋Š” 1)

    โš ๏ธ Wrapper ํด๋ž˜์Šค ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์ 

    1. ๊ฐ์ฒด ๋น„๊ต (==  vs  equals())

    ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ๋Š” == ์—ฐ์‚ฐ์ž ๋Œ€์‹  equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    Integer a = 127;
    Integer b = 127;
    System.out.println(a == b);       // true (์บ์‹ฑ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ)
    
    Integer c = 128;
    Integer d = 128;
    System.out.println(c == d);       // false (์บ์‹ฑ ๋ฒ”์œ„ ๋ฐ–, ๋‹ค๋ฅธ ๊ฐ์ฒด)
    
    System.out.println(c.equals(d));  // true (๊ฐ’ ๋น„๊ต, ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ)

     

    2. ์บ์‹ฑ(Caching) ๋ฉ”์ปค๋‹ˆ์ฆ˜

    Java๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์˜ Wrapper ๊ฐ์ฒด๋ฅผ ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋ฅผ Flyweight ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

    • Boolean: true, false
    • Byte: ๋ชจ๋“  ๊ฐ’ (-128 ~ 127)
    • Character: '\u0000' ~ '\u007f' (0 ~ 127)
    • Short, Integer, Long: -128 ~ 127
    Integer a = Integer.valueOf(100);
    Integer b = Integer.valueOf(100);
    System.out.println(a == b);  // true (์บ์‹ฑ๋œ ๊ฐ™์€ ๊ฐ์ฒด)
    
    Integer c = Integer.valueOf(1000);
    Integer d = Integer.valueOf(1000);
    System.out.println(c == d);  // false (์บ์‹ฑ ๋ฒ”์œ„ ๋ฐ–, ๋‹ค๋ฅธ ๊ฐ์ฒด)

    3. ์„ฑ๋Šฅ ์ด์Šˆ

    ์ž๋™ ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํŠนํžˆ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋งŽ์€ ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ์ด ๋ฐœ์ƒํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    // ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ ์˜ˆ
    Long sum = 0L;  // Wrapper ํƒ€์ž…
    for (int i = 0; i < 1000000; i++) {
        sum += i;  // ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ ๋ฐœ์ƒ
    }
    
    // ๊ฐœ์„ ๋œ ์ฝ”๋“œ
    long sum = 0L;  // ๊ธฐ๋ณธ ํƒ€์ž…
    for (int i = 0; i < 1000000; i++) {
        sum += i;  // ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    }

    4. null ์ฒ˜๋ฆฌ์— ์ฃผ์˜

    Wrapper ํด๋ž˜์Šค๋Š” null์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ž๋™ ์–ธ๋ฐ•์‹ฑ ์‹œ NullPointerException์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    Integer nullInteger = null;
    int value = nullInteger;  // NullPointerException ๋ฐœ์ƒ
    
    // ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•
    int safeValue = (nullInteger != null) ? nullInteger : 0;

    ๐Ÿ™Œ ๋งˆ๋ฌด๋ฆฌ

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Java์˜ Wrapper ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

    Wrapper ํด๋ž˜์Šค๋Š” Java์—์„œ ๊ธฐ๋ณธํ˜•์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋‹ค๋ค„์•ผ ํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

    ํŠนํžˆ ์ปฌ๋ ‰์…˜ ์‚ฌ์šฉ, ์ œ๋„ค๋ฆญ ํƒ€์ž… ์ง€์ •, null ์ฒ˜๋ฆฌ ๋“ฑ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜์ฃ .

     

    ์š”์•ฝํ•˜์ž๋ฉด:

    • ๊ธฐ๋ณธํ˜•์€ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋‹ค → Wrapper๋กœ ๊ฐ์‹ธ๊ธฐ
    • Integer, Double, Boolean ๋“ฑ์œผ๋กœ ๋Œ€์‘
    • Wrapper๋Š” null์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์–ธ๋ฐ•์‹ฑ ์ „ ๋ฐ˜๋“œ์‹œ ์ฒดํฌ

    Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ Wrapper ํด๋ž˜์Šค์˜ ํŠน์„ฑ๊ณผ ํ™œ์šฉ๋ฒ•์„ ์ž˜ ์ดํ•ดํ•˜๋ฉด ๋” ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํŠนํžˆ ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ์˜ ๋น„์šฉ๊ณผ null ์ฒ˜๋ฆฌ ๋“ฑ์— ์ฃผ์˜ํ•˜๋ฉด์„œ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

     

    ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

    ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์ด๋‚˜ ์ถ”๊ฐ€๋กœ ์•Œ๊ณ  ์‹ถ์€ ๊ฐœ๋…์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š” ๐Ÿ˜Š

     

     

    ๋ฐ˜์‘ํ˜•