1. 소개
Java의 정수 타입 기본
Java에서 숫자를 다룰 때 가장 기본적인 데이터 타입 중 하나는 “정수 타입” (int)입니다. 이는 프로그램 내에서 숫자 계산에 자주 사용되는 기본 타입으로, 빠르고 메모리 효율적인 처리를 가능하게 합니다.
반면 Java는 Integer라는 클래스도 제공합니다. 이는 래퍼 클래스로 알려져 있으며, int 값을 객체로 다룰 수 있도록 설계되어 Java의 객체 지향 철학을 따릅니다.
이 두 타입은 비슷해 보이지만 목적과 동작 방식에서 명확한 차이가 있습니다. 그 결과 Java 초보자들은 종종 “int와 Integer의 차이는 무엇인가?” 또는 “각각을 어떻게 적절히 사용해야 할까?”라고 궁금해합니다.
Integer 클래스를 왜 배워야 할까?
Java에서 컬렉션 프레임워크(List나 Map 등) 작업, null 값 처리, 제네릭 사용 등의 상황에서는 기본 타입 int가 적합하지 않은 경우가 많습니다. 이러한 경우 Integer 클래스가 필수적이기 때문에 그 기본을 이해하는 것이 중요합니다.
Integer 클래스는 문자열과 숫자 간 변환, 비교, 비트 연산 등의 작업을 위한 유용한 메서드를 많이 제공합니다. 이러한 메서드를 익히면 더 견고하고 읽기 쉬운 코드를 작성할 수 있습니다.
이 글은 Integer 클래스에 초점을 맞춰 int와의 차이, 사용 방법, 실전 사례를 설명합니다. Java 초보자이든 약간의 경험이 있든 유용한 정보를 찾을 수 있을 테니 계속 읽어보세요!
2. Integer 클래스는 무엇인가?
래퍼 클래스로서의 역할
Java의 Integer 클래스는 기본 타입 int를 객체로 취급할 수 있게 해주는 래퍼 클래스입니다. 이름에서 알 수 있듯이 래퍼는 무언가를 “감싸는” 역할을 하며, 여기서는 원시 int 값을 Integer “상자”에 포장하여 객체로 사용할 수 있게 합니다.
예를 들어, Java 컬렉션(List와 Map 등)은 객체에만 대응할 수 있습니다. int 같은 기본 타입을 직접 사용할 수 없기 때문에 대신 Integer가 필요합니다.
List<Integer> numbers = new ArrayList<>();
numbers.add(10); // The int value 10 is automatically converted to Integer and stored
int 값을 객체 형태로 변환(박싱)함으로써 많은 Java API와 프레임워크와 원활하게 작업할 수 있습니다.
오토박싱과 언박싱
Java 5부터 “오토박싱”과 “언박싱”이라는 편리한 기능이 도입되었습니다.
- 오토박싱 :
int값이 자동으로Integer객체로 변환됩니다 - 언박싱 :
Integer객체가 자동으로int값으로 변환됩니다Integer num = 100; // Autoboxing int result = num + 50; // Unboxing occurs for the calculation
이로 인해 개발자는 명시적인 변환 코드를 작성할 필요가 없으며, Java가 변환을 자동으로 처리하여 코드가 더 간단하고 읽기 쉬워집니다.
그러나 null 값을 언박싱하려고 하면 NullPointerException이 발생하니 주의해야 합니다.
Integer value = null;
int x = value; // This throws an exception
Integer의 중요성
Integer 클래스는 단순히 int의 대체재가 아닙니다. 객체로서 다음과 같은 특성을 가집니다:
null을 할당할 수 있어 “설정되지 않음” 상태를 표현할 수 있습니다- 유연한 연산을 가능하게 하는 메서드를 제공합니다
- 컬렉션 및 기타 객체 기반 구조에서 사용할 수 있습니다
요약하자면, Java의 객체 지향 맥락에서 Integer가 int보다 더 적합한 시나리오가 많습니다.
3. Integer 클래스의 주요 필드와 상수
Java의 Integer 클래스는 숫자와 관련된 유용한 상수와 정보를 가져오는 필드를 여러 개 정의합니다. 이를 사용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
가장 흔히 사용되는 필드를 살펴보겠습니다.
MAX_VALUE와 MIN_VALUE
Integer.MAX_VALUE와 Integer.MIN_VALUE는 int 타입이 가질 수 있는 최대값과 최소값을 나타내는 상수입니다.
MAX_VALUE: 2,147,483,647 (2의 31제곱에서 1을 뺀 값)MIN_VALUE: -2,147,483,648 (2의 31제곱의 음수)
이것들은 범위 검사나 오버플로우 방지를 위해 자주 사용되며, 안전한 숫자 처리에 필수적입니다.
int max = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
System.out.println("Max value: " + max); // 2147483647
System.out.println("Min value: " + min); // -2147483648
SIZE와 BYTES
SIZE와 BYTES는 int 타입이 사용하는 비트 수와 바이트 수를 나타내는 상수입니다.
Integer.SIZE: 32 (비트 수)Integer.BYTES: 4 (바이트 수)
이것들은 바이너리 데이터 처리나 시스템 프로그래밍 시나리오에서 자주 사용되며, 데이터 크기 계산이나 암호화 목적으로 활용됩니다.
System.out.println("Number of bits in int: " + Integer.SIZE); // 32
System.out.println("Number of bytes in int: " + Integer.BYTES); // 4
TYPE 필드
Integer.TYPE은 int 타입의 Class 객체를 반환하는 정적 필드입니다. 이는 리플렉션이나 제네릭스와 같은 고급 프로그래밍 기법에 가끔 사용됩니다.
Class<?> clazz = Integer.TYPE;
System.out.println(clazz.getName()); // int
일상적인 개발에서는 자주 사용되지 않지만, Java 내부나 프레임워크 개발에 관심이 있다면 알아두면 좋습니다.
이 모든 상수들은 static final로 정의되어 있으며, 인스턴스를 생성하지 않고 Integer 클래스에서 직접 접근할 수 있습니다. 이러한 타입 관련 상수를 아는 것은 Java에서 오류를 방지하고 성능을 향상시키는 좋은 첫걸음입니다.
4. Integer 클래스의 주요 메서드
Integer 클래스는 단순히 int의 래퍼 이상입니다. 문자열 변환, 숫자 비교, 비트 연산 등 실용적인 많은 메서드를 제공하여 일상적인 Java 개발에 매우 유용합니다. 여기서는 카테고리별로 가장 자주 사용되는 메서드를 소개하겠습니다.
변환 메서드
parseInt()
parseInt()은 문자열을 int 값으로 변환하는 정적 메서드입니다. 사용자 입력 처리나 외부 파일에서 숫자로 처리해야 할 데이터를 다룰 때 주로 사용됩니다.
String str = "123";
int number = Integer.parseInt(str); // 123
* 비숫자 문자열이 전달되면 NumberFormatException이 발생하므로, try-catch를 사용하는 것이 더 안전합니다.
valueOf()
valueOf()은 문자열이나 int 값을 Integer 객체로 변환하는 메서드입니다. parseInt()와 달리 반환 타입은 int가 아닌 Integer입니다.
Integer num1 = Integer.valueOf("456");
Integer num2 = Integer.valueOf(789);
Integer.valueOf()는 -128에서 127 사이의 값에 대해 캐시된 객체를 재사용하여 new로 새 인스턴스를 생성하는 것보다 효율적입니다.
표시 및 변환 메서드
toString()
toString()은 숫자 값을 문자열로 반환하는 메서드입니다. 문자열 연결이나 값 표시를 위해 흔히 사용됩니다.
int number = 100;
String str = Integer.toString(number); // "100"
이진법이나 16진법과 같은 다른 진법으로 변환하는 데도 사용할 수 있습니다.
System.out.println(Integer.toBinaryString(10)); // "1010"
System.out.println(Integer.toHexString(255)); // "ff"
비교 메서드
compareTo()
compareTo()은 두 Integer 객체를 비교하여 상대적인 순서를 나타내는 정수를 반환하는 메서드입니다.
Integer a = 10;
Integer b = 20;
int result = a.compareTo(b); // -1 (returns a negative value if a < b)
Collections.sort와 같은 메서드와 함께 자주 사용됩니다.
equals()
equals()은 두 값이 같은지 확인하는 메서드입니다. == 연산자는 참조를 비교하므로, 객체 값을 비교할 때는 equals()를 권장합니다.
Integer x = 100;
Integer y = 100;
System.out.println(x.equals(y)); // true
비트 연산 메서드
Uniquely among Java classes, the Integer class offers extensive support for low-level bitwise operations.
Java 클래스 중에서 Integer 클래스는 저수준 비트 연산에 대한 광범위한 지원을 제공합니다.
bitCount()
This method returns the number of bits set to 1 in the given int value.
이 메서드는 주어진 int 값에서 1로 설정된 비트의 개수를 반환합니다.
int count = Integer.bitCount(15); // 15 in binary is 1111 → 4 bits set to 1
highestOneBit()
This method returns the value with only the highest-order one bit set from the given int value.
이 메서드는 주어진 int 값에서 가장 높은 자리의 1 비트만 설정된 값을 반환합니다.
int highest = Integer.highestOneBit(10); // 10 (1010) → 8 (1000)
Very useful for optimizations involving bitwise operations.
비트 연산을 포함한 최적화에 매우 유용합니다.
Other Handy Methods
Integer.reverse(int): Reverses the order of the bits
Integer.reverse(int): 비트 순서를 뒤집습니다.Integer.signum(int): Returns the sign (positive: 1, negative: -1, zero: 0)
Integer.signum(int): 부호를 반환합니다 (양수: 1, 음수: -1, 0: 0).Integer.hashCode(): Returns a hash code (important when using collections)
Integer.hashCode(): 해시 코드를 반환합니다 (컬렉션 사용 시 중요).
Numbers are handled everywhere in Java. Just knowing these methods will help you write elegant and efficient code. In particular, conversion, comparison, and bitwise methods are commonly used in practice, so be sure to master them.
Java에서는 숫자가 어디에서든 사용됩니다. 이러한 메서드들을 알면 우아하고 효율적인 코드를 작성하는 데 도움이 됩니다. 특히 변환, 비교, 비트 연산 메서드는 실무에서 흔히 사용되므로 반드시 숙달해야 합니다.
5. Choosing Between int and Integer
In Java, there are two types for representing integers: int and Integer. While you can convert between them, using them incorrectly can lead to performance issues or unexpected errors. Let’s review their characteristics and how to choose the right one for each scenario.
Java에서는 정수를 나타내는 두 가지 타입이 있습니다: int와 Integer. 이들 간에 변환은 가능하지만, 잘못 사용하면 성능 문제나 예상치 못한 오류가 발생할 수 있습니다. 각 상황에 맞는 선택 방법과 특성을 살펴보겠습니다.
Differences in Terms of Performance
int is a primitive type, has a fixed memory size (4 bytes), and is very fast for calculations. Integer, on the other hand, is an object type, stored as an instance on the heap, and provides methods and additional features.
int는 원시 타입으로, 고정된 메모리 크기(4바이트)를 가지며 계산이 매우 빠릅니다. 반면 Integer는 객체 타입으로 힙에 인스턴스로 저장되며 메서드와 추가 기능을 제공합니다.
int a = 10;
Integer b = 10;
Even though you assign the same value, the internal handling differs. For intensive calculations or loops, using int is much faster and more memory-efficient.
같은 값을 할당하더라도 내부 처리 방식이 다릅니다. 연산이 집중되거나 루프를 돌릴 때 int를 사용하면 훨씬 빠르고 메모리 효율이 높습니다.
Example: Performance Difference in Loops
long startTime = System.nanoTime();
int sum = 0;
for (int i = 0; i < 1000000; i++) {
sum += i;
}
long endTime = System.nanoTime();
System.out.println("Time for int: " + (endTime - startTime) + " ns");
Doing the same with Integer causes boxing and unboxing overhead, which can make it several times slower.
Integer로 동일하게 수행하면 박싱·언박싱 오버헤드가 발생해 몇 배 느려질 수 있습니다.
Nullability and Exception Handling Differences
int cannot be assigned null. So it’s not suitable when you need to represent “no value” or “unset.”
int는 null을 할당할 수 없습니다. 따라서 “값 없음”이나 “설정되지 않음”을 나타내어야 할 경우 적합하지 않습니다.
Integer value = null;
if (value == null) {
System.out.println("Value is unset");
}
With Integer, you can explicitly handle null, making it ideal for situations like form validation or database retrieval where a value might be missing.
Integer를 사용하면 null을 명시적으로 처리할 수 있어, 값이 없을 수 있는 폼 검증이나 데이터베이스 조회와 같은 상황에 이상적입니다.
However, unboxing a null Integer to int throws a NullPointerException, so caution is needed.
하지만 null인 Integer를 int로 언박싱하면 NullPointerException이 발생하므로 주의가 필요합니다.
Compatibility with Collections
Java collections (like List and Map) can only store objects. That’s why you can’t use int directly; you need Integer instead.
Java 컬렉션(예: List, Map)은 객체만 저장할 수 있습니다. 따라서 int를 직접 사용할 수 없고 Integer를 사용해야 합니다.
List<Integer> numbers = new ArrayList<>();
numbers.add(100); // int → Integer via autoboxing
Also, when working with generics, you can’t specify a primitive type as a type argument, so you must use Integer.
또한 제네릭을 사용할 때는 원시 타입을 타입 인자로 지정할 수 없으므로 Integer를 사용해야 합니다.
Summary: Guidelines for Choosing
| Use Case | Recommended Type | Reason |
|---|---|---|
| Mainly numeric calculations | int | Faster processing and better memory efficiency |
| Need to represent presence or absence of a value | Integer | Can handle null |
| Working with collections or generics | Integer | Object type required |
| Using numbers as Map keys | Integer | int can’t be used |
Basically, remember: “Use int for speed, Integer for flexibility.”
기본적으로 기억하세요: “속도는 int, 유연성은 Integer”.
6. Common Errors and How to Handle Them
NullPointerException
원인:
Because Integer is an object type, it can be assigned null, but if you try to unbox a null Integer to int, a NullPointerException occurs.
Integer는 객체 타입이므로 null을 할당할 수 있지만, null인 Integer를 int로 언박싱하려고 하면 NullPointerException이 발생합니다.
Integer value = null;
int x = value; // Exception thrown here
해결책:
Always check for null before unboxing.
언박싱하기 전에 항상 null 여부를 확인하세요.
if (value != null) {
int x = value;
} else {
int x = 0; // Assign a default value
}
Alternatively, you can safely handle this using Optional (Java 8+):
또는 Optional(Java 8 이상)을 사용해 안전하게 처리할 수 있습니다.
int x = Optional.ofNullable(value).orElse(0);
NumberFormatException
원인:
이 예외는 Integer.parseInt() 또는 Integer.valueOf()를 사용하여 숫자가 아닌 문자열을 변환하려 할 때 발생합니다.
String input = "abc";
int num = Integer.parseInt(input); // NumberFormatException
해결책:
입력이 숫자인지 미리 확인하세요. 일반적으로 정규 표현식을 사용합니다.
if (input.matches("-?\\d+")) {
int num = Integer.parseInt(input);
} else {
System.out.println("Not a numeric value");
}
또한, 예외를 처리하고 안전한 처리를 보장하기 위해 try‑catch를 사용하세요.
try {
int num = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("Invalid number format: " + input);
}

==와 equals()의 오용
원인:
두 Integer 객체를 ==로 비교하면 값이 아니라 레퍼런스를 비교하게 됩니다. 따라서 값이 동일하더라도 서로 다른 객체라면 false가 반환될 수 있습니다.
Integer a = new Integer(128);
Integer b = new Integer(128);
System.out.println(a == b); // false (different references)
System.out.println(a.equals(b)); // true (same value)
- -128에서 127 사이의 값에 대해서는 객체가 캐시되므로
==가 true를 반환할 수 있습니다. 하지만 이는 구현에 따라 다릅니다.
해결책:
두 Integer 객체를 비교할 때는 항상 .equals()를 사용하세요.
if (a.equals(b)) {
System.out.println("Values are equal");
}
언박싱 후 원시 int 값으로 비교할 수도 있습니다.
if (a.intValue() == b.intValue()) {
System.out.println("Equal as int values");
}
오버플로우 간과
원인:
int와 Integer는 32비트 값(±2,147,483,647)만 처리할 수 있습니다. 이 범위를 초과하면 올바르게 동작하지 않습니다.
int a = Integer.MAX_VALUE;
int b = a + 1;
System.out.println(b); // -2,147,483,648 (wraps around to negative)
해결책:
필요하다면 long이나 BigInteger를 사용하고, 항상 한계를 염두에 두세요.
요약
Integer는 편리하고 유연하지만 null, 레퍼런스, 타입 변환에 관한 많은 주의사항이 있습니다. 특히 Java 초보자에게는 특정 예외가 발생하는 이유를 이해하는 것이 중요합니다.
이러한 일반적인 함정을 미리 알면 버그를 피하고 더 안정적인 코드를 작성할 수 있습니다.
7. 실용 예제: Integer 클래스의 활용 방법
이제 Integer 클래스의 특징, 차이점, 중요한 포인트에 대해 충분히 이해했을 것입니다. 다음으로 Integer가 일반적으로 사용되는 실제 사례를 살펴보겠습니다.
사용자 입력을 숫자로 변환하기
웹 및 데스크톱 애플리케이션에서 사용자 입력은 보통 String 형태로 받습니다. 하지만 나이, 수량과 같은 필드를 다룰 때는 이를 숫자로 처리해야 할 경우가 많으며, Integer가 이러한 변환에 유용합니다.
String input = "25"; // User input as a string
try {
Integer age = Integer.valueOf(input); // Convert String → Integer
System.out.println("Age: " + age);
} catch (NumberFormatException e) {
System.out.println("Invalid input");
}
입력이 올바른 숫자인지 검증하고 오류를 처리함으로써 견고한 사용자 입력 처리를 구현할 수 있습니다.
구성 값 및 환경 변수 관리
시스템이나 구성 값을 문자열로 읽은 뒤 정수로 변환하는 경우가 흔합니다. 예를 들어 System.getProperty()를 사용할 때 결과를 파싱해야 할 때가 많습니다.
String maxConn = System.getProperty("app.maxConnections", "100");
int max = Integer.parseInt(maxConn);
System.out.println("Max connections: " + max);
이러한 경우 합리적인 기본값을 제공하고 유연한 구성 변경을 허용하는 것이 중요합니다.
컬렉션에서 숫자 다루기
.컬렉션(예: List) 안에서 숫자를 다루고 싶을 때는 int 대신 Integer를 사용해야 합니다. 예를 들어, 사용자가 입력한 ID 목록을 일시적으로 저장할 수 있습니다.
List<Integer> ids = new ArrayList<>();
ids.add(101);
ids.add(205);
ids.add(309);
for (Integer id : ids) {
System.out.println("Processing ID: " + id);
}
자동 박싱(autoboxing) 덕분에 int에서 Integer로의 변환이 자동으로 이루어지므로, 수동 변환을 신경 쓰지 않고 간결한 코드를 작성할 수 있습니다.
비트 연산을 이용한 플래그 관리
Integer 클래스는 비트 조작 메서드가 풍부하여 저수준 플래그 관리 및 상태 전환에 유용합니다.
int flags = 0;
// Set the 1st bit
flags |= 0b0001;
// Set the 2nd bit
flags |= 0b0010;
// Check if the 2nd bit is set
boolean isSet = (flags & 0b0010) != 0;
System.out.println("The 2nd bit is: " + (isSet ? "ON" : "OFF"));
Integer.toBinaryString(flags)를 사용하면 플래그 상태를 시각화할 수 있습니다:
System.out.println("Current flag state: " + Integer.toBinaryString(flags));
데이터베이스와 함께 사용하기
JDBC 등 데이터베이스와 연동할 때, 숫자 컬럼에 int가 아니라 Integer를 사용하면 null 값을 안전하게 처리할 수 있습니다.
ResultSet rs = stmt.executeQuery("SELECT age FROM users WHERE id = 1");
if (rs.next()) {
Integer age = (Integer) rs.getObject("age");
System.out.println(age != null ? "Age: " + age : "Age not set");
}
원시 타입 int는 null이 될 수 없으므로, 여기서는 Integer가 적절한 선택입니다.
요약
Integer 클래스는 단순히 int를 감싸는 역할을 넘어 유연한 데이터 처리와 실제 개발에서의 안전성 보장에 핵심적인 역할을 합니다. 특히 다음과 같은 경우에 유용합니다:
- 사용자 입력이나 외부 설정을 숫자로 변환
null일 수 있는 데이터를 처리- 컬렉션에 정수를 저장
- 비트 연산으로 상태 관리
Integer를 마스터하면 더 확장 가능하고, 유지 보수가 쉬우며, 안정적인 코드를 작성할 수 있습니다.
8. 결론
Java의 Integer 클래스는 int를 대체하는 것에 그치지 않고, Java의 객체 지향 특성과 밀접하게 연관된 중요한 클래스입니다. 이 글에서는 초보자도 이해하기 쉬운 방식으로 다음과 같은 내용을 설명하면서 실용적인 측면도 다루었습니다:
Integer 클래스의 장점은 무엇인가요?
- 객체로 취급될 수 있기 때문에
null값을 다룰 수 있고 컬렉션에서도 사용할 수 있습니다 - 다양한 편리한 메서드(문자열 변환, 비교, 비트 연산 등)를 제공합니다
System.getProperty()와 데이터베이스 연산과도 잘 호환되어 유연한 설계가 가능합니다- 객체 캐싱과 자동 박싱(autoboxing)으로 코드가 더 간단하고 간결해집니다
이러한 장점은 원시 타입 int에서는 얻을 수 없습니다.
하지만 중요한 주의점도 있습니다
null인Integer를 언박싱하면NullPointerException이 발생합니다==연산자를 사용하면 기대와 다르게 값이 비교될 수 있습니다- 성능 측면에서 대규모 수치 연산은
int가 훨씬 더 효율적입니다
이러한 점을 이해하지 못하면 예상치 못한 버그나 성능 문제가 발생할 수 있습니다.
올바른 타입 선택이 핵심
| Use Case | Recommended Type | Reason |
|---|---|---|
| When fast numeric processing is required | int | Superior memory efficiency and calculation speed |
When data may be null | Integer | Supports nullability and can be handled safely |
| When used with collections or generics | Integer | Because an object type is required |
| When using numbers as Map keys | Integer | int cannot be used |
요약하면, int와 Integer는 단순히 다른 타입이 아니라 설계 목표와 사용 사례에 따라 적절히 선택해야 합니다.
최종 생각
Integer를 이해하는 것은 Java에서 데이터 타입을 다루는 기본일 뿐만 아니라, 객체 지향 설계, 예외 처리, 성능 최적화와 같은 깊은 프로그래밍 역량을 키우는 데도 필수적입니다. 정수 타입은 매우 흔히 사용되므로, 초기에 충분히 이해해 두면 앞으로의 Java 개발 여정에서 큰 자산이 될 것입니다.
자주 묻는 질문 (FAQ)
Q1. int와 Integer의 차이점은 무엇인가요?
A. int는 정수 값을 효율적이고 빠르게 처리하기 위해 사용되는 Java의 기본 타입입니다. Integer는 int를 객체로 취급할 수 있게 해주는 래퍼 클래스로, null 값을 다루고 다양한 메서드를 사용할 수 있게 합니다. 예를 들어, 컬렉션에 값을 저장하거나 설정된 값과 설정되지 않은 값을 구분할 때 Integer가 더 적합합니다.
Q2. parseInt()와 valueOf()의 차이점은 무엇인가요?
A. 둘 다 문자열을 숫자로 변환하지만, 반환 타입이 다릅니다:
parseInt(String s)→int(기본 타입)를 반환합니다valueOf(String s)→Integer(객체 타입)를 반환합니다
필요에 따라 선택하세요. 객체가 필요하거나 null 값을 처리해야 한다면 valueOf()가 더 유용합니다.
Q3. Integer 객체를 비교할 때 ==를 사용하지 말아야 하는 이유는 무엇인가요?
A. == 연산자는 객체 참조를 비교하며, 값 자체를 비교하지 않습니다. 값이 같더라도 다른 인스턴스라면 false를 반환할 수 있습니다. 128 이상의 값에 대해서는 객체 캐싱이 적용되지 않아 예상치 못한 결과가 발생할 수 있습니다. 값 비교에는 항상 .equals()를 사용하세요.
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // false (different references)
System.out.println(a.equals(b)); // true (same value)
Q4. Integer에 null을 할당하면 어떻게 되나요?
A. Integer는 객체이므로 null을 할당할 수 있습니다. 그러나 null 상태에서 int로 변환(언박싱)하려 하면 NullPointerException이 발생합니다.
Integer val = null;
int num = val; // Exception thrown here
null을 확인하거나 더 안전한 코드 작성을 위해 Optional을 사용하세요.
Q5. Integer의 최대값과 최소값을 어떻게 찾을 수 있나요?
A. Java에서는 Integer.MAX_VALUE와 Integer.MIN_VALUE를 사용하여 이러한 한계를 쉽게 얻을 수 있습니다.
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
범위 확인과 오버플로우 보호에 유용합니다.
Q6. 컬렉션에서 int를 사용할 수 없는 이유는 무엇인가요?
A. Java 컬렉션(List와 Map 등)은 객체만 처리하며, 기본 타입은 처리하지 않습니다. 그래서 Integer를 사용해야 합니다.
List<Integer> list = new ArrayList<>();
list.add(123); // int is automatically converted to Integer
Q7. 성능 면에서 int와 Integer 중 어느 것이 더 나은가요?
A. 고속 계산이나 루프에서 대량의 숫자를 처리할 때는 int가 훨씬 빠르고 메모리 효율적입니다. Integer는 더 편리하고 유연하지만, 추가 객체와 박싱으로 인해 무거운 작업에는 덜 적합할 수 있습니다.


