[스터디]Java의 정석 17일차

Kristopher·2022년 1월 12일
0

Java 스터디

목록 보기
17/31

(Ch9) 1.4 Math 클래스 ~

2.7 java.math.BigDecimal클래스

Math 클래스

Math클래스는 수학 연산과 관련된 메소드로 구성되어 있다. Math클래스의 생성자는 접근 제어자가 private이라 다른 클래스에서 Math인스턴스를 생성할 수 없는데, Math클래스 내의 인스턴스 변수가 하나도 없어 인스턴스를 생성할 필요가 없기 때문이다.

예외를 발생시키는 메소드

JDK1.8부터 오버플로우를 감지하기 위해 'Exact'가 포함된 메소드들이 추가되었다. 추가된 메소드들은 다음과 같다.

int addExact(int x, int y) // x+y
int subtractExact(int x, int y) // x-y
int multiplyExact(int x, int y) //x*y
int incrementExact(int a) // a++
int decrementExact(int a) //a--
int negateExact(int a) //-a
int toIntExact (long value) //(int)value - int로의 형변환

위의 메소드들은 오버플로우가 발생하면 ArithmeticException을 발생시킨다.

StrictMath클래스

Math클래스는 최대한의 성능을 위해 JVM의존이 아닌 OS 의존적인 계산이 이루어진다. 하지만 OS마다 반올림 처리방법 등이 다를 수 있어 계산결과가 다르게 나올 수 있다. 이러한 문제점을 해결하기 위해 나온 것이 StrictMath클래스이다. 성능을 포기하는 대신 어떤 OS에서 실행시켜도 같은 결과값을 도출한다.

래퍼(wrapper) 클래스

객체지향의 개념에서는 모든 것을 객체로 다뤄야 한다. 하지만 자바에서는 8개의 기본형 변수는 객체로 다루지 않는데, 필요에 의해 객체로 다뤄야 할 때가 있다. 이럴 때 사용되는 것이 래퍼 클래스이다. int와 char를 제외한 기본형은 첫 글자를 대문자로만 바꿔주면되며, int는 Integer, char는 Character를 래퍼클래스명으로 사용한다.

Number클래스

Number클래스는 추상클래스로 래퍼 클래스들의 조상이다. Number클래스의 자손에는 long으로도 다룰 수 없는 긴 정수를 다루는 BigInteger, double로도 다룰 수 없는 긴 실수를 다루는 BigDecimal 등이 있다.

오토박싱과 언박싱

JDK1.5이전에는 참조형과 기본형간의 연산이 불가능했다. 그렇기에 기본형을 래퍼클래스를 사용해 객체로 만들어야 했는데 오토박싱과 언박시으이 기능으로 더이상 그럴 필요가 없어졌다. 기본형 값을 래퍼 클래스의 객체로 자동 변호나해주는 것을 오토박싱이라고 하며, 그 반대로 변환하는 것을 언박싱이라고 한다. 이는 필요에 따라 컴파일러가 자동적으로 코드를 추가하기도 한다.

Reference

Java의 정석
남궁성의 정석코딩

profile
개발자 지망생입니다.

0개의 댓글