BigInteger
BigInteger 클래스는 매우 큰 정수 값을 처리하기 위한 클래스이다. 이 클래스는 내부적으로 2진수로 표현이 되며, 자바에서 기본적으로 제공하는 int나 long 타입의 크기를 초과하는 정수 값을 처리 할 수 있다.
BigInteger 클래스의 생성자
BigInteger 클래스는 다양한 방법으로 객체를 생성할 수 있다. 그 중에서도 가장 일반적인 방법은 아래와 같다.
BigInteger bi1 = new BigInteger("12345678901234567890");
BigInteger bi2 = BigInteger.valueOf(1234567890);
위 코드에서 bi1 객체는 문자열 "12345678901234567890"을 BigInteger 객체로 변환하여 생성하고, bi2 객체는 int 값 1234567890을 BigIntefer 객체로 변환하여 생성하고 있다.
BigInteger 클래스의 메서드
BigInteger 클래스는 다양한 메서드를 제공한다.
- add(BigInteger val) : 두 BigInteger 객체를 더합니다.
- subtract(BigInteger val) : 두 BigInteger 객체를 뺍니다.
- multiply(BigInteger val) : 두 BigInteger 객체를 곱합니다.
- divide(BigInteger val) : 두 BigInteger 객체를 나눕니다.
- remainder(BigInteger val) : 나눈 후 나머지를 구합니다.
- pow(int exponent) : BigInteger 객체의 거듭제곱 값을 구합니다.
- compareTo(BigInteger val) : 두 BigInteger 객체를 비교합니다.
import java.math.BigInteger;
public class BigIntegerExample {
public static void main(String[] args) {
BigInteger bi1 = new BigInteger("12345678901234567890");
BigInteger bi2 = BigInteger.valueOf(9876543210L);
System.out.println(bi1.add(bi2)); // 12345678911111111100
System.out.println(bi1.subtract(bi2)); // 12345678901224691380
System.out.println(bi1.multiply(bi2)); // 121932631137021985988589876543210
System.out.println(bi1.divide(bi2)); // 1249871
System.out.println(bi1.remainder(bi2)); // 5354883090
System.out.println(bi1.pow(3)); // 18816763774341817660241843116748917312835671120000000000000000000
System.out.println(bi1.compareTo(bi2));// 1
}
}
BigDecimal
BigDecimal 클래스는 매우 큰 실수 값을 처리하기 위한 클래스이다. 이 클래스는 내부적으로 10진수로 표현되며, 정확한 계산을 위해 BigDecimal 값을 다룰 때는 꼭 문자열을 사용하여 생성해야 한다.
BigDecimal 클래스의 생성자
BigDecimal 클래스는 다양한 방법으로 객체를 생성할 수 있다. 그 중에서도 가장 일반적인 방법은 다음과 같다.
BigDecimal bd1 = new BigDecimal("1234567890.1234567890");
BigDecimal bd2 = BigDecimal.valueOf(1234567890.1234567890);
위 코드에서 bd1 객체는 문자열 "1234567890.1234567890"을 BigDecimal 객체로 변환하여 생성하고, bd2 객체는 double 값 1234567890.1234567890을 BigDecimal 객체로 변환하여 생성한다.
BigDecimal 클래스의 메서드
BigDecimal 클래스는 다양한 메서드를 제공하고 있다.
- add(BigDecimal val) : 두 BigDecimal 객체를 더합니다.
- subtract(BigDecimal val) : 두 BigDecimal 객체를 뺍니다.
- multiply(BigDecimal val) : 두 BigDecimal 객체를 곱합니다.
- divide(BigDecimal val, int scale, RoundingMode mode) : 두 BigDecimal 객체를 나눕니다.
- remainder(BigDecimal val) : 나눈 후 나머지를 구합니다.
- pow(int exponent) : BigDecimal 객체의 거듭제곱 값을 구합니다.
- compareTo(BigDecimal val) : 두 BigDecimal 객체를 비교합니다.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal("1234567890.1234567890");
BigDecimal bd2 = BigDecimal.valueOf(9876543210.9876543210);
System.out.println(bd1.add(bd2)); // 11111111101.111111110
System.out.println(bd1.subtract(bd2)); // -8641975320.864197532
System.out.println(bd1.multiply(bd2)); // 12193263113702198582.179875855586289
System.out.println(bd1.divide(bd2, 5, RoundingMode.HALF_UP)); // 0.12497
System.out.println(bd1.remainder(bd2)); // 1234567890.123456789
System.out.println(bd1.pow(3)); // 1881676377434181766024414490003627689.027754159300506721
System.out.println(bd1.compareTo(bd2));// -1
}
}
위 예제에서 BigDecimal 클래스의 divide 메서드를 호출할 때, 세 번째 인자로 RoundingMode.Half_UP을 넘겨주어 반올림을 하도록 설정하였다. 이렇게 하면 결과값이 정확하게 반올림되어 출력된다.
결론
BigIntger와 BigDecimal 클래스는 자바에서 매우 큰 정수와 실수 값을 다룰 때 유용하다. 하지만, 이 클래스들은 내부적으로 문자열을 사용하기 때문에 다른 기본 자료형에 비해 속도가 느릴 수 있다. 또한, 연산에서 사용되는 메모리 크기가 매우 크기 때문에, 메모리 사용량을 줄이기 위해서는 다른 자료형들보다 더 신중한 사용이 필요하다.
'Language > Java' 카테고리의 다른 글
JVM GC(Garbage Collection) (0) | 2023.04.13 |
---|---|
JVM(Java Virtual Machine) (0) | 2023.04.03 |
StringTokenizer, StringBuilder, StringBuffer (0) | 2023.03.27 |
정규식(Regular Expression) (0) | 2023.03.25 |
(Java)10진법 <--> n집법 변환 (0) | 2023.03.16 |