코드 분석

자바 정수 자료형 완전 정복: long, BigInteger, Integer를 실무와 면접까지 통달하기

mynote6676 2025. 6. 27. 20:19

목차 구성

1. 서론 : int만 알면 충분하지 않을까?

 - 실무에서 자주 마주치는 숫자 처리의 문제들

2. long: int보다 더 큰 숫자가 필요할 때

 - 크기, 범위, 사용 예제, 주의점 등

3.BigInteger : 무한대에 가까운 숫자와 정밀도

 - 수학 연산 메서드, 불변 객체, 생성법, 에제

4. Integer : int를 객체로 다루는 이유

 - 오토박싱, 언박싱, null처리, 컬렉션 활용

5. 비교 정리표 : 언제 어떤 자료형을 써야 할까?   ----> (왜 자료형이라는 표현 채택했을까 의문)

 - 상황별 선택 가이드와 정리표

6. 실무 적용 예시 : 금액, 계산, DB 저장 등

 - 실제 라이브러리에서 활용, 설계 판단 기준

7. 마무리 : 실무/면접에서 자주 묻는 질문 정리

 - 예) Ingteger와 int의 차이점은? BigInteger는 언제 쓰나요?

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

🧩 서론 : int만 알면 충분하지 않을까 ?

자바(Java)를 배우면 가장 먼저 접하는 정수 자료형은 int입니다.

하지만 실무에서 들어가면 단순히 int 만으로는 해결되지 않는 문제들이 생깁니다.

에를 들어:

💰 "은행 잔액 계산이 음수가 되면 안돼요!"

📊 "컬렉션에 숫자를 넣었더니 NullPointerException이 나요!    ----------->(여기서 말하는 컬렉션 확인 요망)

📈 "우주 시뮬래이션 데이터 계산 중 오버플로우가 났어요!"

이런 문제를 해결하기 위해 우리는 long,BigInteger,Integer를 이해해야 합니다.

 

-----------------------------------------------------------------------------------------------------------------------------------------------

🔢 1. long :  더 큰 정수, 기본 타입

✅ 정의

longint보다 큰 범위를 가지는 64비트 기본 자료형입니다.

숫자가 int의 범위(약 ± 21억)를 초과할 때 사용됩니다.

✅ 코드 예시

long population = 7900000000L; // 'L'을 반드시 붙여야 long으로 인식

✅ 특징

기본 타입이라 빠르다(primitive type)

범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

주의 : 리터널 뒤에 꼭 L을 붙여야 long으로 인식함 --------------------> (리터널)뜻이 접미사?인지 확인하기

📘 용어 정리

"Primitive Type(기본형): 자바에서 가장 기본적인 데이터 타입(int , long, char, boolean 등)"

리터널(Literal) : 코드에 직접 쓰인 값 자체. 예: 100, "Hello",true

접미사(Suffix) : 특정 타입을 명시할 때 사용하는 표식. L은 long 리터럴을 나타냄(100L)

 

📦 2. Integer : 객체로서의 정수형

✅ 정의

integer는 int를 객체처럼 다룰 수 있도록 만들어진 **래퍼 클래스(Wrapper Class)**입니다.

int a = 10;
Integer b = a; // 오토박싱
int c = b; // 언박싱

✅ 특징

  • null을 저장할 수 있음(컬렉션에 유용)
  • 객체이므로 메서드를 쓸 수 있음(ex. Integer.parseInt())
  • 메모리 상에는 **힙(Heap)**에 저장됨
  • 비교 시 == 는 주소 비교, equals()는 값 비교

 

⚠️주의 : == 비교 시 주의!

Integer x = 100;
integer y = 100;
System.out.println( x == y ); // true (캐쉬 범위 내)

Integer a = 1000;
Integer b = 1000;
System.out.println( a == b); // false (캐쉬 범위 초과)

자바는 -128 ~ 127까지는 같은 객체로 캐싱해 재사용합니다.

 

💥 3.BigInteger: 무한 정수 계산기

✅ 정의 

BigIntegerlong보다 더 큰 정수를 저장하거나 수학 계산이 필요할 때 사용하는

클래스입니다.

java.math.BigInteger 패키지에 포함되어 있고, **불변 객체(Immutable Object)**입니다.

 

✅ 코드 예시

import java.math.BigInteger;

BigInteger bigA = new BigInteger("92233720368547758079233");
BigInteger bigB = new BigInteger("10000000000000000000000");

BigInteger result = bigA.add(bigB);
System.out.println(result);

 

✅특징

  • 표현 가능한 범위가 사실상 무한(메모리 한도 내)
  • 기본 타입이 아니므로 연산도 메서드를 통해 수행(ex. .add(), .multiply())
  • 속도는 느리지만 정확도는 최고

⚙️ 4. 비교 : int, long, Integer, BigInteger

     항목                               int                      long                          Integer                                    BigInteger

타입 기본형 기본형 참조형 참조형
메모리 크기 4바이트 8바이트 객체 포인터 + 내부 값 객체 포인터 + 내부 배열
표현 범위 ±21억 ±922경 ±21억 이론상 무한
null 허용
속도 빠름 빠름 중간 느림
연산 방식 직접 연산 직접 연산 언박싱 후 연산 메서드 기반 (.add())

 

🧠 5. 실무 & 면접 질문 정리

Q1 . Integerint의 차이는 ?

  • int : 값 저장/ null 불가 / 빠름
  • Integer: 객체 저장/ null 허용 / 박싱 오버헤드 있음

Q2. BigInteger는 언제 써야 하나요?

  • 암호화, 천문학적 계산 등 long으로 표현 불가할 때
  • 예 : RSA, 블록체인, 금융 등

Q3 . 왜 숫자 뒤에 L 을 붙여야 하나요?

  • 자바 기본 숫자 리터럴은 int로 인식되기 때문에
  • long으로 인식시키기 위해 L을 반드시 붙임
long x = 10000000000; // 오류
long y = 10000000000L; // OK

 

📚 용어 정리

영어 용어 한국어 설명

primitive type 기본 자료형 (int, long, boolean 등)
wrapper class 기본형을 객체처럼 사용하기 위한 클래스 (Integer 등)
boxing 기본형 → 객체형 변환
unboxing 객체형 → 기본형 변환
literal 코드에 직접 써놓은 값 (100, "hello" 등)
suffix 리터럴 뒤에 붙이는 타입 명시 (L, F, D 등)
immutable 변경 불가능한 객체 (값이 바뀌면 새 객체 생성됨)
overflow 정수 범위를 초과할 때 발생하는 현상
728x90