JAVA

Java의 거대 정수를 담을 수 있는 BigInteger

반응형

대학교 학창시절에 BigInteger만들기를 자료구조 시간에 C로 만들어 본적이 있다.

그리고 실질적으로 실무에서는 Long값을 벗어난 데이터를 담아서 사용해본적이 없어 자바의 BigInteger라는 객체가 존재하는지 몰랐다.

매주 진행하는 알고리즘 스터디에서 문제를 풀다가 Long값 이상의 데이터가 필요해서 찾다가 사용하게 되었다.

몇 가지 정리해보자.

BigInteger 객체 생성 방법
팩토리 메서드와 기존 constant 객체로써 제공하는 방법으로 BigInteger객체를 만들 수 있다.

1
2
3
4
5
6
7
8
9
10
// Constant
BigInteger zero = BigInteger.ZERO;
BigInteger one = BigInteger.ONE;
BigInteger ten = BigInteger.TEN;
        
// 생성자로 생성
BigInteger ten2 = new BigInteger("10");
        
// 팩터리 메스드로 생성
BigInteger ten3 = BigInteger.valueOf(10);
cs


그럼 생성자와 Constant 그리고 팩터리 메서드로 만드는 경우의 차이는 무엇인가? 
Constant와 팩터리 메스드의경우 같은 계속 같은 객체가 나오게 될 것이고, 생성자의 경우 매번 다른 객체가 나온다.

1
2
3
4
5
6
7
8
9
// 비교
System.out.println(ten == ten2);
System.out.println(ten3 == ten2);
System.out.println(ten3 == ten);
 
// 결과
false
false
true
cs


Immutable
그리고 BigInteger의 경우 Immutable 속성으로 인해 연산을 통해 나온 결과는 기존의 BigInteger 객체가 변경되는 것이 아니라 새로운 객체가 만들어진다.

사칙연산
우선 BigInteger는 사칙연산을 바로 사용할 수 없다.
사칙연산을 사용하기 위해서는 다음과 같은 메서드등을 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
// 덧셈
System.out.println(ten2.add(ten3));
        
// 뺄셈
System.out.println(ten2.subtract(ten3));
        
// 곱셈
System.out.println(ten2.multiply(BigInteger.ONE));
 
// 나누기
System.out.println(ten.divide(BigInteger.ONE));
cs


다음번에는 이 BigInteger를 이용해서 피보나치 수열을 한번 풀어보자.

반응형

'JAVA' 카테고리의 다른 글

Not Synchronized SimpleDateFormat  (0) 2021.07.18