์ถ์ฒ
ChatGPT
1. ๋ฐ์ฑ(Boxing)๊ณผ ์ธ๋ฐ์ฑ(Unboxing)์ด๋?
๋ฐ์ฑ Boxing
์์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ์ ๋์ํ๋ ๋ ํผ ํด๋์ค ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ . ์๋ฅผ ๋ค์ด, int๋ฅผ Integer๋ก ๋ณํํ๋ค.
์ธ๋ฐ์ฑ Unboxing
๋ํผ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋ค์ ์์ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ณผ์ . ์๋ฅผ ๋ค์ด, Integer ๊ฐ์ฒด๋ฅผ int ๊ฐ์ผ๋ก ๋ณํํ๋ค.
์๋ฐ์์๋ ์ด๋ฌํ ๋ณํ์ด ์๋์ผ๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ์คํ ๋ฐ์ฑ(Auto-Boxing)๊ณผ ์คํ ์ธ๋ฐ์ฑ(Auto-Unboxing)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
์์
int num = 10; // ์์ ํ์
Integer boxedNum = num; // ์คํ ๋ฐ์ฑ: int -> Integer
int unboxedNum = boxedNum; // ์คํ ์ธ๋ฐ์ฑ: Integer -> int
2. ๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ผ๋ก ์ธํ ์ฑ๋ฅ ์ด์
1. ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ GC(๊ฐ๋น์ง ์ปฌ๋์ ) ์ค๋ฒํค๋
๋ฉ๋ชจ๋ฆฌ ํ ๋น
๋ฐ์ฑ์ ์ํํ ๋๋ง๋ค ์๋ก์ ๊ฐ์ฒด๊ฐ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋๋ค. ์๋ฅผ ๋ค์ด, int ๊ฐ์ Integer ๊ฐ์ฒด๋ก ๋ณํํ๋ฉด ํ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด Integer ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ์ด ์ถ๊ฐ์ ์ธ ๊ฐ์ฒด ์์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฆ๊ฐ์ํค๊ณ , ํนํ ๋ฐ๋ณต๋ฌธ์์ ๋ง์ ์์ ๋ฐ์ฑ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ Garbage Collection
๋ฐ์ฑ๋ ๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ ์์ด์ง๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์ด ๋๋ค. ๋ง์ ์์ ๋ฐ์ฑ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์๋ฉธ๋๋ฉด, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ ์์ฃผ ๋ฐ์ํ๊ฒ ๋์ด ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
2. ์ฐ์ฐ ์ฑ๋ฅ ์ ํ
์ถ๊ฐ ์ฐ์ฐ
๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ ์๊ตฌํ๋ค. ์๋ฅผ ๋ค์ด, Integer ๊ฐ์ฒด๋ฅผ int๋ก ๋ณํํ๋ ์ธ๋ฐ์ฑ ๊ณผ์ ์์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ๋ฐ๋ผ๊ฐ์ ์ค์ int ๊ฐ์ ์ถ์ถํ๋ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ๋ฐ๋ณต์ ์ผ๋ก ์ด ์์ด ์ํ๋๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
3. ์บ์ฑ(Caching) ์ค๋ฒํค๋
์๋ฐ๋ -128์์ 127 ์ฌ์ด์ Integer ๊ฐ์ฒด๋ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์บ์ฑ์ ํ๋ค. ์ด ๋ฒ์ ๋ด์ ๊ฐ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์บ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฐ์ ๋ํด์๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฏ๋ก, ์บ์ ๋ฒ์ ๋ฐ๊นฅ์ ๊ฐ๋ค์ ๋ํด์๋ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. ๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ผ๋ก ์ธํ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
1. ์์ ํ์ ๋ฐฐ์ด ์ฌ์ฉ
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์ ํ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ๋์ ์์ ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ ๋ฆฌํ ์ ์๋ค.
int[] numbers = new int[100]; // ์์ ํ์
๋ฐฐ์ด
2. Stream API์ IntStream, LongStream, DoubleStream ์ฌ์ฉ
์๋ฐ 8 ์ด์์์๋ Stream API๋ฅผ ์ฌ์ฉํ ๋, ์์ ํ์ ์ ์ํ ํน๋ณํ ์คํธ๋ฆผ์ ์ ๊ณตํ๋ค. IntStream, LongStream, DoubleStream ๋ฑ์ ๋ฐ์ฑ๊ณผ ์ธ๋ฐ์ฑ์ ํผํ๋ฉด์ ์์ ํ์ ์ ์คํธ๋ฆผ ์ฐ์ฐ์ ์ํํ ์ ์๊ฒ ํ๋ค.
IntStream.range(1, 100).forEach(System.out::println);
3. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ํผ ํด๋์ค ๋์ ์์ ํ์ ์ฌ์ฉ
๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๋ํผ ํด๋์ค (Integer, Double ๋ฑ) ๋์ ์์ ํ์ (int, double ๋ฑ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋ ์ ๋ฆฌํ๋ค
4. ์ปฌ๋ ์ ์ ๋๋ฌด ๋ง์ ๋ ํผ ํ์ ์ฌ์ฉ์ ํผํ๊ธฐ
์ปฌ๋ ์ ์ด๋ ์ ๋ค๋ฆญ ํด๋์ค์ ์๋ง์ ์์ ํ์ ๊ฐ์ ๋ํํด์ ์ ์ฅํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ปฌ๋ ์ ์ ์ฌ์ฉ์ ์ค์ด๊ฑฐ๋, ์์ ํ์ ์ ์ฉ ์ปฌ๋ ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
4. ์ค์ ์ ์ธ ์์ ์ฝ๋
๋ค์ ์ฝ๋๋ ์ ๋ค๋ฆญ List๋ฅผ ์ฌ์ฉํ์ฌ Integer ๊ฐ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ์ ์์ ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋น๊ตํ๋ ๊ฐ๋จํ ์์ ์ด๋ค.
import java.util.ArrayList;
import java.util.List;
public class BoxingExample {
public static void main(String[] args) {
// ์ ๋ค๋ฆญ List์ ๋ํผ ํด๋์ค Integer๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
List<Integer> numbers = new ArrayList<>();
long start = System.nanoTime();
for (int i = 0; i < 1_000_000; i++) {
numbers.add(i); // ์คํ ๋ฐ์ฑ ๋ฐ์
}
long end = System.nanoTime();
System.out.println("Time taken with List<Integer>: " + (end - start) + " ns");
// ์์ ํ์
๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
int[] numbersArray = new int[1_000_000];
start = System.nanoTime();
for (int i = 0; i < 1_000_000; i++) {
numbersArray[i] = i; // ์คํ ๋ฐ์ฑ ์์
}
end = System.nanoTime();
System.out.println("Time taken with int[]: " + (end - start) + " ns");
}
}
์ ์์ ์์ List<Integer>๋ ์คํ ๋ฐ์ฑ์ผ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ ๋ฐ๋ฉด, ์์ ํ์ ๋ฐฐ์ด์ธ int[]๋ ์ฑ๋ฅ์ด ๋ ์ฐ์ํ ์ ์๋ค. ์ด ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ ์์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก int[]๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ณ์ฑ Variance (0) | 2024.08.27 |
---|---|
[Java] ์ ์ ๋ค๋ฆญ์ ์์ ํ์ ์ ์ฌ์ฉํ ์ ์๋๊ฐ (0) | 2024.08.27 |
[Java] ์ ๋ค๋ฆญ์ ํ์ ์๊ฑฐ Type Erasure (0) | 2024.08.27 |
[Java][JVM] JVM ์ปดํ์ผ๋ฌ๊ฐ switch ๋ฌธ์ ์ ์ฉํ๋ ์ต์ ํ ๊ธฐ๋ฒ (0) | 2024.08.21 |
[Java] switch ๋ฌธ์ด if ๋ฌธ๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ ์ด์ (0) | 2024.08.21 |