목차 구성
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 : 더 큰 정수, 기본 타입
✅ 정의
long은 int보다 큰 범위를 가지는 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: 무한 정수 계산기
✅ 정의
BigInteger는 long보다 더 큰 정수를 저장하거나 수학 계산이 필요할 때 사용하는
클래스입니다.
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 . Integer 과 int의 차이는 ?
- 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 | 정수 범위를 초과할 때 발생하는 현상 |
'코드 분석' 카테고리의 다른 글
조건문 완전 마스터: if , else if , else 흐름 구조와 실전 예제까지 (0) | 2025.06.30 |
---|---|
자바논리형 완전정복(boolean 완전 정복-boolean에서 if까지: 판단이 코드로 이어지는 철학과 구조): 비전공자부터 시니어까지 (3) | 2025.06.29 |
자바 논리형 완전 정복(boolean의 모든 것: 비전공자부터 시니어 개발자까지) (0) | 2025.06.28 |
웹 요청 흐름 완전 정복! 클라이언트부터 서버, 그리고 가시 브라우저까지 (2) | 2025.06.26 |
(JAVA) int 자료형 - 메모리, 비트, 내부 구조, 오버플로우까지 깊게 파헤치치기 (4) | 2025.06.25 |