์์ํ๊ธฐ์ ์์ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ด์ผ๊ธฐ๊ฐ ๋์ค๋๋ฐ
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด JVM์ ์ด์์ฒด์ ์์์ ์คํ๋ ๋ ๊ฐ๊ฐ์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๊ธฐ์ ํด๋น ์ด์ผ๊ธฐ๋ฅผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด๋จ
๊ฒฐ๋ก ์ int๋ primitive type(์์ ํ์ ) ์ด๊ณ integer๋ wrapper class(๋ํผ ํด๋์ค) ์
int
- ๋จ์ํ ์ซ์ ๊ฐ์ ๋ํ๋ด๋ Java์ 8๊ฐ ์์ ํ์
์ค ํ๋์
=> ๋ฉ์๋๋ ์์ฑ์ ๊ฐ์ง ์ ์๋ ๋จ์ํ ๋ฐ์ดํฐ ํ์
Java์ 8๊ฐ ์์ ํ์
boolean : ture ๋๋ false (8bit)
char : ์ ๋์ฝ๋ ๋ฌธ์ ๋ฐ์ดํฐ (16bit)
byte : -128 ~ 127 (8bit)
short : -32768 ~ 32767 (16bit)
int : -21์ต ~ 21์ต (32bit)
long : -100๊ฒฝ ~ 100๊ฒฝ (64bit)
float : -3.4 * 10^38 ~ 3.4 * 10^3.8 (32bit)
double : -1.7 * 10^308 ~ 1.7 * 10^308 (64bit)
- null ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 0์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ ๊ณ ์ฐ์ฐ ์๋๊ฐ ๋น ๋ฆ
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ Stack ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ง์ ์ ์ฅ๋จ
Stack ๋ฉ๋ชจ๋ฆฌ
1. ๋ฉ์๋ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์ญ์
2. LIFO(Last In First Out) ๊ตฌ์กฐ๋ก ๋์ํจ
3. ๊ฐ ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ธ Stack ์์ญ์ ๊ฐ์ง
4. ์ ๊ทผ ์๋๊ฐ ๋น ๋ฆ
Integer
- int ์์ ํ์
์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ํด๋์ค์
=> java.lang.Number ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค
- ๋ค์ํ ๋ฉ์๋์ ์์ฑ์ ์ ๊ณต
- null ๊ฐ์ ๊ฐ์ง ์ ์์
- ๊ฐ์ฒด์ด๋ฏ๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ (์ฝ 16byte)
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ๋จ
=> ์ฐธ์กฐ ๋ณ์๋ Stack์ ์ ์ฅ๋๊ณ , ์ค์ ๊ฐ์ฒด๋ Heap์ ์ ์ฅ๋๋ ๊ฒ์
Heap ๋ฉ๋ชจ๋ฆฌ
1. ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ์์ญ
2. ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
3. Garbage Collector์ ์ํด ๊ด๋ฆฌ๋จ
4. Stack๋ณด๋ค ์ ๊ทผ ์๋๊ฐ ๋๋ฆผ
Wrapper Class
๋ํผ ํด๋์ค๋ ์์ ํ์ ์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ํด๋์ค์
public final class Integer extends Number implements Comparable<Integer> {
private final int value;
public Integer(int value) {
this.value = value;
}
// ๊ธฐํ ๋ฉ์๋๋ค...
}
Integer ํด๋์ค์ ์ค์ ๊ตฌํ์ ์ดํด๋ณด๋ฉด ๋ด๋ถ์ ์ผ๋ก int ๊ฐ์ ํฌ์ฅํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์
Boxing(๋ฐ์ฑ), Unboxing(์ธ๋ฐ์ฑ)
Boxing๊ณผ Unboxing์ Java์์ primitive type๊ณผ ํด๋น wrapper class ๊ฐ์ ๋ณํ ๊ณผ์ ์ ์๋ฏธํ๋๋ฐ
Java 5๋ถํฐ๋ Autoboxing๊ณผ Auto-unboxing์ ์ง์ํจ
๋ฐ์ฑ
int primitiveValue = 10;
Integer wrappedValue = new Integer(primitiveValue); // ๋ช
์์ ๋ฐ์ฑ
๊ธฐ๋ณธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ํด๋นํ๋ ๋ํผ ํด๋์ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ฒ์ด ๋ฐ์ฑ์
์ธ๋ฐ์ฑ
Integer wrappedValue = new Integer(20);
int primitiveValue = wrappedValue.intValue(); // ๋ช
์์ ์ธ๋ฐ์ฑ
๋ํผํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํด๋นํ๋ ๊ธฐ๋ณธ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด ์ธ๋ฐ์ฑ์
์๋ ๋ฐ์ฑ (Autoboxing)
int primitiveValue = 10;
Integer wrappedValue = primitiveValue; // ์๋ ๋ฐ์ฑ
์๋ ๋ฐ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ํ์ ์ ์๋์ผ๋ก ํด๋น ๋ํผ ํด๋์ค ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์
Integer wrappedValue = Integer.valueOf(primitiveValue);
์ปดํ์ผ๋ฌ ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ด ๋ณํํจ
์ถ๊ฐ์ ์ผ๋ก Integer.valueOf()๋ int -> Integer ๋ String -> Integer ๋ก ๋ณํํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋๋ก -128~127 ์ฌ์ด์ ๊ฐ์ ๋ํด ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํจ
private static class IntegerCache {
static final Integer[] cache;
static {
// -128๋ถํฐ 127๊น์ง์ Integer ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ cache ๋ฐฐ์ด์ ์ ์ฅ
cache = new Integer[256];
for (int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
Integer ํด๋์ค ๋ด๋ถ์ ์ผ๋ก IntegerCache๋ผ๋ ์ ์ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ์ด ํด๋์ค๋ JVM์ด ์์๋ ๋ ํด๋น ๋ฒ์์ Integer ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ๋ฐฐ์ด์ ์ ์ฅํด๋
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127) {
return IntegerCache.cache[i + 128];
}
return new Integer(i);
}
=> ์ด ๋ฒ์ ๋ด์ ๊ฐ๋ค์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฏธ ์บ์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์ ์ํด
์๋ ์ธ๋ฐ์ฑ(Auto-unboxing)
Integer wrappedValue = new Integer(20);
int primitiveValue = wrappedValue; // ์๋ ์ธ๋ฐ์ฑ
์๋ ์ธ๋ฐ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ํผ ํด๋์ค ๊ฐ์ฒด๋ฅผ ํด๋น ๊ธฐ๋ณธ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์
int primitiveValue = wrappedValue.intValue();
์ปดํ์ผ๋ฌ ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ด ๋ณํํจ
์ฌ์ฉ ์์์ ์ฐจ์ด์
1. Collection์์์ ์ฌ์ฉ
// ์๋ชป๋ ์ฌ์ฉ
ArrayList<int> numbers = new ArrayList<int>(); // ์ปดํ์ผ ์ค๋ฅ
// ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(1); // ์๋ ๋ฐ์ฑ ๋๋ถ์ int 1์ด Integer๋ก ๋ณํ๋์ด ์ ์ฅ๋จ
ArrayList, HashMap ๋ฑ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ ๊ฐ์ฒด๋ง ์ ์ฅํ ์ ์์ผ๋ฏ๋ก ์์ํ์ ์ ์ฌ์ฉํ ์ ์์
2. ๋ฉ์๋์ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ
// ๋ฌธ์์ด์ ์ ์๋ก ๋ณํ
int value = Integer.parseInt("123");
// ์ ์์ 16์ง์ ํํ ์ป๊ธฐ
String hexString = Integer.toHexString(255); // "ff" ๋ฐํ
// ์ต๋๊ฐ, ์ต์๊ฐ ์ฌ์ฉ
int maxValue = Integer.MAX_VALUE;
Integer ํด๋์ค๋ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
3. ๋น๊ต ์ฐ์ฐ
int a = 5;
int b = 5;
System.out.println(a == b); // true, ๊ฐ ๋น๊ต
Integer c = new Integer(5);
Integer d = new Integer(5);
System.out.println(c == d); // false, ์ฐธ์กฐ ๋น๊ต
System.out.println(c.equals(d)); // true, ๊ฐ ๋น๊ต
Integer ๊ฐ์ฒด ๋น๊ต ์ '==' ์ฐ์ฐ์๋ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ฏ๋ก ๊ฐ ๋น๊ต๋ฅผ ์ํ๋ค๋ฉด equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํจ
Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(100);
System.out.println(a == b); // true
Integer c = Integer.valueOf(200);
Integer d = Integer.valueOf(200);
System.out.println(c == d); // false
=> ์์์ ๋ค๋ค๋ฏ์ด Integer.valueOf()๊ฐ -128~127๊น์ง์ ๊ฐ์ ๋ํด ์บ์ฑ์ ์ฌ์ฉํ๊ธฐ์ ํด๋น ๋ฒ์์ Integer์์ '==' ๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก true๊ฐ ๋์ฌ ์ ์์
(a์ b ๋ชจ๋ valueOf(100)์ ํตํด ์์ฑ๋์์ผ๋ฏ๋ก ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฏธ ์์ฑ๋ ๋์ผํ Integer ๊ฐ์ฒด๋ฅผ ๋ฐํํจ)
๐ ์ฌ์ฉ ์ง์นจ
์ฑ๋ฅ(๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ)์ด ์ค์ํ๊ฑฐ๋ ๋จ์ ๊ณ์ฐ์์๋ int๋ฅผ ์ฌ์ฉํ๊ณ
null ๊ฐ์ด ํ์ํ๊ฑฐ๋ ๊ฐ์ฒด๋ก ๋ค๋ค์ผ ํ ๊ฒฝ์ฐ integer๋ฅผ ์ฌ์ฉํด์ผํจ
(์ปฌ๋ ์ ์์๋ integer ์ฌ์ฉ์ด ํ์)
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] Concepts of Programming Languages (0) | 2025.03.29 |
---|---|
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ๊ธฐ๊ณ์ด, ์ด์ ๋ธ๋ฆฌ์ด, ๊ณ ๊ธ์ธ์ด์ ์ฐจ์ด์ (C++ vs Java) (0) | 2025.03.10 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ๋ฉ๋ชจ๋ฆฌ (0) | 2025.02.24 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ์ด์์ฒด์ ์ ์ปดํจํฐ (0) | 2025.02.18 |
์์ํ๊ธฐ์ ์์ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ด์ผ๊ธฐ๊ฐ ๋์ค๋๋ฐ
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด JVM์ ์ด์์ฒด์ ์์์ ์คํ๋ ๋ ๊ฐ๊ฐ์ ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๊ธฐ์ ํด๋น ์ด์ผ๊ธฐ๋ฅผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด๋จ
๊ฒฐ๋ก ์ int๋ primitive type(์์ ํ์ ) ์ด๊ณ integer๋ wrapper class(๋ํผ ํด๋์ค) ์
int
- ๋จ์ํ ์ซ์ ๊ฐ์ ๋ํ๋ด๋ Java์ 8๊ฐ ์์ ํ์
์ค ํ๋์
=> ๋ฉ์๋๋ ์์ฑ์ ๊ฐ์ง ์ ์๋ ๋จ์ํ ๋ฐ์ดํฐ ํ์
Java์ 8๊ฐ ์์ ํ์
boolean : ture ๋๋ false (8bit)
char : ์ ๋์ฝ๋ ๋ฌธ์ ๋ฐ์ดํฐ (16bit)
byte : -128 ~ 127 (8bit)
short : -32768 ~ 32767 (16bit)
int : -21์ต ~ 21์ต (32bit)
long : -100๊ฒฝ ~ 100๊ฒฝ (64bit)
float : -3.4 * 10^38 ~ 3.4 * 10^3.8 (32bit)
double : -1.7 * 10^308 ~ 1.7 * 10^308 (64bit)
- null ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 0์
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ ๊ณ ์ฐ์ฐ ์๋๊ฐ ๋น ๋ฆ
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ Stack ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ง์ ์ ์ฅ๋จ
Stack ๋ฉ๋ชจ๋ฆฌ
1. ๋ฉ์๋ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์ญ์
2. LIFO(Last In First Out) ๊ตฌ์กฐ๋ก ๋์ํจ
3. ๊ฐ ์ค๋ ๋๋ง๋ค ๋ ๋ฆฝ์ ์ธ Stack ์์ญ์ ๊ฐ์ง
4. ์ ๊ทผ ์๋๊ฐ ๋น ๋ฆ
Integer
- int ์์ ํ์
์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ํด๋์ค์
=> java.lang.Number ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค
- ๋ค์ํ ๋ฉ์๋์ ์์ฑ์ ์ ๊ณต
- null ๊ฐ์ ๊ฐ์ง ์ ์์
- ๊ฐ์ฒด์ด๋ฏ๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ (์ฝ 16byte)
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ๋จ
=> ์ฐธ์กฐ ๋ณ์๋ Stack์ ์ ์ฅ๋๊ณ , ์ค์ ๊ฐ์ฒด๋ Heap์ ์ ์ฅ๋๋ ๊ฒ์
Heap ๋ฉ๋ชจ๋ฆฌ
1. ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ์์ญ
2. ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
3. Garbage Collector์ ์ํด ๊ด๋ฆฌ๋จ
4. Stack๋ณด๋ค ์ ๊ทผ ์๋๊ฐ ๋๋ฆผ
Wrapper Class
๋ํผ ํด๋์ค๋ ์์ ํ์ ์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ํด๋์ค์
public final class Integer extends Number implements Comparable<Integer> {
private final int value;
public Integer(int value) {
this.value = value;
}
// ๊ธฐํ ๋ฉ์๋๋ค...
}
Integer ํด๋์ค์ ์ค์ ๊ตฌํ์ ์ดํด๋ณด๋ฉด ๋ด๋ถ์ ์ผ๋ก int ๊ฐ์ ํฌ์ฅํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์
Boxing(๋ฐ์ฑ), Unboxing(์ธ๋ฐ์ฑ)
Boxing๊ณผ Unboxing์ Java์์ primitive type๊ณผ ํด๋น wrapper class ๊ฐ์ ๋ณํ ๊ณผ์ ์ ์๋ฏธํ๋๋ฐ
Java 5๋ถํฐ๋ Autoboxing๊ณผ Auto-unboxing์ ์ง์ํจ
๋ฐ์ฑ
int primitiveValue = 10;
Integer wrappedValue = new Integer(primitiveValue); // ๋ช
์์ ๋ฐ์ฑ
๊ธฐ๋ณธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ํด๋นํ๋ ๋ํผ ํด๋์ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ฒ์ด ๋ฐ์ฑ์
์ธ๋ฐ์ฑ
Integer wrappedValue = new Integer(20);
int primitiveValue = wrappedValue.intValue(); // ๋ช
์์ ์ธ๋ฐ์ฑ
๋ํผํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํด๋นํ๋ ๊ธฐ๋ณธ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด ์ธ๋ฐ์ฑ์
์๋ ๋ฐ์ฑ (Autoboxing)
int primitiveValue = 10;
Integer wrappedValue = primitiveValue; // ์๋ ๋ฐ์ฑ
์๋ ๋ฐ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ํ์ ์ ์๋์ผ๋ก ํด๋น ๋ํผ ํด๋์ค ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์
Integer wrappedValue = Integer.valueOf(primitiveValue);
์ปดํ์ผ๋ฌ ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ด ๋ณํํจ
์ถ๊ฐ์ ์ผ๋ก Integer.valueOf()๋ int -> Integer ๋ String -> Integer ๋ก ๋ณํํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋๋ก -128~127 ์ฌ์ด์ ๊ฐ์ ๋ํด ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํจ
private static class IntegerCache {
static final Integer[] cache;
static {
// -128๋ถํฐ 127๊น์ง์ Integer ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ cache ๋ฐฐ์ด์ ์ ์ฅ
cache = new Integer[256];
for (int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
Integer ํด๋์ค ๋ด๋ถ์ ์ผ๋ก IntegerCache๋ผ๋ ์ ์ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ์ด ํด๋์ค๋ JVM์ด ์์๋ ๋ ํด๋น ๋ฒ์์ Integer ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ๋ฐฐ์ด์ ์ ์ฅํด๋
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127) {
return IntegerCache.cache[i + 128];
}
return new Integer(i);
}
=> ์ด ๋ฒ์ ๋ด์ ๊ฐ๋ค์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฏธ ์บ์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์ ์ํด
์๋ ์ธ๋ฐ์ฑ(Auto-unboxing)
Integer wrappedValue = new Integer(20);
int primitiveValue = wrappedValue; // ์๋ ์ธ๋ฐ์ฑ
์๋ ์ธ๋ฐ์ฑ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ํผ ํด๋์ค ๊ฐ์ฒด๋ฅผ ํด๋น ๊ธฐ๋ณธ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์
int primitiveValue = wrappedValue.intValue();
์ปดํ์ผ๋ฌ ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ด ๋ณํํจ
์ฌ์ฉ ์์์ ์ฐจ์ด์
1. Collection์์์ ์ฌ์ฉ
// ์๋ชป๋ ์ฌ์ฉ
ArrayList<int> numbers = new ArrayList<int>(); // ์ปดํ์ผ ์ค๋ฅ
// ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(1); // ์๋ ๋ฐ์ฑ ๋๋ถ์ int 1์ด Integer๋ก ๋ณํ๋์ด ์ ์ฅ๋จ
ArrayList, HashMap ๋ฑ์ ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ ๊ฐ์ฒด๋ง ์ ์ฅํ ์ ์์ผ๋ฏ๋ก ์์ํ์ ์ ์ฌ์ฉํ ์ ์์
2. ๋ฉ์๋์ ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ
// ๋ฌธ์์ด์ ์ ์๋ก ๋ณํ
int value = Integer.parseInt("123");
// ์ ์์ 16์ง์ ํํ ์ป๊ธฐ
String hexString = Integer.toHexString(255); // "ff" ๋ฐํ
// ์ต๋๊ฐ, ์ต์๊ฐ ์ฌ์ฉ
int maxValue = Integer.MAX_VALUE;
Integer ํด๋์ค๋ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
3. ๋น๊ต ์ฐ์ฐ
int a = 5;
int b = 5;
System.out.println(a == b); // true, ๊ฐ ๋น๊ต
Integer c = new Integer(5);
Integer d = new Integer(5);
System.out.println(c == d); // false, ์ฐธ์กฐ ๋น๊ต
System.out.println(c.equals(d)); // true, ๊ฐ ๋น๊ต
Integer ๊ฐ์ฒด ๋น๊ต ์ '==' ์ฐ์ฐ์๋ ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ฏ๋ก ๊ฐ ๋น๊ต๋ฅผ ์ํ๋ค๋ฉด equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํจ
Integer a = Integer.valueOf(100);
Integer b = Integer.valueOf(100);
System.out.println(a == b); // true
Integer c = Integer.valueOf(200);
Integer d = Integer.valueOf(200);
System.out.println(c == d); // false
=> ์์์ ๋ค๋ค๋ฏ์ด Integer.valueOf()๊ฐ -128~127๊น์ง์ ๊ฐ์ ๋ํด ์บ์ฑ์ ์ฌ์ฉํ๊ธฐ์ ํด๋น ๋ฒ์์ Integer์์ '==' ๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก true๊ฐ ๋์ฌ ์ ์์
(a์ b ๋ชจ๋ valueOf(100)์ ํตํด ์์ฑ๋์์ผ๋ฏ๋ก ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฏธ ์์ฑ๋ ๋์ผํ Integer ๊ฐ์ฒด๋ฅผ ๋ฐํํจ)
๐ ์ฌ์ฉ ์ง์นจ
์ฑ๋ฅ(๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ)์ด ์ค์ํ๊ฑฐ๋ ๋จ์ ๊ณ์ฐ์์๋ int๋ฅผ ์ฌ์ฉํ๊ณ
null ๊ฐ์ด ํ์ํ๊ฑฐ๋ ๊ฐ์ฒด๋ก ๋ค๋ค์ผ ํ ๊ฒฝ์ฐ integer๋ฅผ ์ฌ์ฉํด์ผํจ
(์ปฌ๋ ์ ์์๋ integer ์ฌ์ฉ์ด ํ์)
'๐ป CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] Concepts of Programming Languages (0) | 2025.03.29 |
---|---|
Java๋ ์ปดํ์ผ ์ธ์ด์ผ๊น? ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ผ๊น? (0) | 2025.03.10 |
[ํ๋ก๊ทธ๋๋ฐ์ธ์ด๋ก ] ๊ธฐ๊ณ์ด, ์ด์ ๋ธ๋ฆฌ์ด, ๊ณ ๊ธ์ธ์ด์ ์ฐจ์ด์ (C++ vs Java) (0) | 2025.03.10 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ๋ฉ๋ชจ๋ฆฌ (0) | 2025.02.24 |
[CS ์ ๊ณต์ง์ ๋ ธํธ] ์ด์์ฒด์ ์ ์ปดํจํฐ (0) | 2025.02.18 |