junghyunlyoo boxingUnboxing - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

์ž๋ฐ”์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… 2๊ฐ€์ง€

  • ๊ธฐ๋ณธ ํƒ€์ž… : int, double, boolean ๋“ฑ
  • ์ฐธ์กฐ ํƒ€์ž… : String, List ๋“ฑ

๊ธฐ๋ณธ ํƒ€์ž…์€ 1:1๋Œ€์‘์œผ๋กœ '์ฐธ์กฐ ํƒ€์ž…'์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด๋ฅผ '๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…' ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (Integer,Double,Boolean ๋“ฑ)

๋ฐ•์‹ฑ & ์–ธ๋ฐ•์‹ฑ

int num = 10;

Integer integer = new Integer(num); //@Deprecated(since="9")

int newNum = integer.intValue();

๊ทธ๋ฆฌ๊ณ  jdk 1.5๋ถ€ํ„ฐ ์ง€์›๋˜๋Š” ์˜คํ†  ๋ฐ•์‹ฑ๊ณผ ์˜คํ†  ์–ธ๋ฐ•์‹ฑ ๋•๋ถ„์— ๊ธฐ๋ณธ ํƒ€์ž…๊ณผ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์„ ํŽธํ•˜๊ฒŒ ๊ตฌ๋ถ„ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜คํ†  ๋ฐ•์‹ฑ & ์˜คํ†  ์–ธ๋ฐ•์‹ฑ

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(10);

int integer = list.get(0);

๋ฐ•์‹ฑ ํƒ€์ž…๋ณด๋‹ค๋Š” ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

๋ฐ•์‹ฑ ํƒ€์ž… vs ๊ธฐ๋ณธ ํƒ€์ž… ์ฐจ์ด 1

๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’์— ๋”ํ•ด ์‹๋ณ„์„ฑ ์ด๋ผ๋Š” ์†์„ฑ๋„ ๊ฐ–๋Š”๋‹ค.

(๊ฐ ๊ฐ์ฒด๋Š” ์–ธ์ œ๋‚˜ ์ž์‹ ๋งŒ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง„ ๊ณ ์œ ์˜ ์กด์žฌ)

๋‘๊ฐœ์˜ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๊ฐ’(value)์ด ๊ฐ™์•„๋„ ๊ฒฐ๊ตญ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


'์ฒซ ๋ฒˆ์งธ ์ฐจ์ด'๋ฅผ ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด?

๋‹ค์Œ์€ Integer ๊ฐ’์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋น„๊ต์ž๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” Exception์„ ์ผ์œผํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๋”์šฑ ์น˜๋ช…์ ์ด๊ฒŒ, ์ž˜๋ชป ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด๋ฒ„๋ฆฐ๋‹ค.

Comparator<Integer> naturalOrder = (i,j) -> (i < j) ? -1 : (i == j ? 0 : 1);

naturalOrder.compare(new Integer(42), new Integer(42));

๋‘ Integer์˜ '๊ฐ’'์ด ๊ฐ™์•„์„œ 0์ด ์ถœ๋ ฅ๋ผ์•ผ ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” 1์ด ์ถœ๋ ฅ๋œ๋‹ค.

์ฐธ์กฐ ํƒ€์ž…(๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…)๊ฐ„์— '==' ์—ฐ์‚ฐ์€ ๊ฐ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์˜๋„ํ•œ ๊ฐ’์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค...

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ œ๋Œ€๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

//๋น„๊ต ๋Œ€์ƒ์ธ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๊ฒฝ์šฐ
Integer integer1 = 5;

Integer integer2 = 5;

//int๋กœ ์˜คํ†  ์–ธ๋ฐ•์‹ฑ ํ›„ ๋น„๊ต

integer1.compareTo(integer2);


=================================

//๋น„๊ต ๋Œ€์ƒ์ธ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ

List<Integer> values = Arrays.asList(1, 2, 3);

//naturalOrder ๋ฉ”์„œ๋“œ๊ฐ€ Comparable<Object>์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์˜ 



//compareTo๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค.

//์ฐธ๊ณ ๋กœ ArrayList๋Š” binarySort ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค


values.sort(Comparator.naturalOrder());

์ด ํŠน์ง•์„ ๊ฐ„๊ณผํ•œ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ์ง€๋„ ๋ชจ๋ฅด๋Š” ๋Œ€์ฐธ์‚ฌ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค!

๋ฐ•์‹ฑ ํƒ€์ž… vs ๊ธฐ๋ณธ ํƒ€์ž… ์ฐจ์ด 2

๊ธฐ๋ณธ ํƒ€์ž…์˜ ๊ฐ’์€ ์–ธ์ œ๋‚˜ ์œ ํšจํ•œ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์€ ์ฐธ์กฐ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’, ์ฆ‰ null์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.


'๋‘ ๋ฒˆ์งธ ์ฐจ์ด'๋ฅผ ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด?

public class Unbelievable {
    static Integer i;

    public static void main(String[] args) {
        if (i == 42)
            System.out.println("๋ฏฟ์„ ์ˆ˜ ์—†๊ตฐ!");
    }
}

์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋„ํ•œ ์ฝ”๋“œ๊ฒ ์ง€๋งŒ, ์•„์‰ฝ๊ฒŒ๋„(?) ๊ทธ ์ „์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

i == 42 ๋ฅผ ํ•  ๋•Œ, null ์ฐธ์กฐ๋ฅผ ์–ธ๋ฐ•์‹ฑํ•˜๊ฒŒ ๋˜๋ฉด์„œ NPE๊ฐ€ ํ„ฐ์ง„๋‹ค.

i์˜ ํƒ€์ž…์„ Integer์—์„œ int๋กœ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค!

๋ฐ•์‹ฑ ํƒ€์ž… vs ๊ธฐ๋ณธ ํƒ€์ž… ์ฐจ์ด 3

๊ธฐ๋ณธ ํƒ€์ž…์ด ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฉด์—์„œ ๋” ํšจ์œจ์ ์ด๋‹ค.


'์„ธ ๋ฒˆ์งธ ์ฐจ์ด'๋ฅผ ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด?

public static void main(String[] args) {
    Long sum = 0L;
    for (long i = 0; i <= Integer.MAX_VALUE; i++) {
        sum += i;
    }
    System.out.println(sum);
}

์œ„ ์ฝ”๋“œ๋Š” ๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์ด ๋ฐ˜๋ณตํ•ด์„œ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒด๊ฐ๋  ์ •๋„๋กœ ์„ฑ๋Šฅ์ด ๋Š๋ฆฌ๋‹ค. ( sum = sum + i )

๊ฒฐ๋ก 

๊ธฐ๋ณธ ํƒ€์ž…์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ณ  ์‹ ๊ฒฝ์„ ๋œ ์จ๋„ ๋˜๋‹ˆ, ์›ฌ๋งŒํ•˜๋ฉด ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ž.

์ฐธ๊ณ ๋กœ ์•„๋ž˜์— ๊ฒฝ์šฐ์—” ๋ฐ•์‹ฑ๋œ ๊ธฐ๋ณธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ํƒ€์ž…(List ๋“ฑ)
  • ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ๋ฉ”์„œ๋“œ์˜ ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜(T, E ๋“ฑ)
  • ๋ฆฌํ”Œ๋ ‰์…˜
โš ๏ธ **GitHub.com Fallback** โš ๏ธ