Math 클래스?
자바는 수학적 계산을 쉽게 해주는 Math 클래스를 제공한다.
Math 클래스의 여러 가지 메서드를 이용해서 수학적 연산, 비교 등을 쉽게 할 수 있다.
간단한 예제로 두 수의 크기를 비교할 때 if문을 사용하는 방법과 Math 클래스를 사용하는 방법을 알아보자.
int a = 10;
int b = 5;
int max = 0;
//if문
if(a>b){
max = a;
}else{
max = b;
}
//삼항 연산자
max = a>b ? a:b;
//Math 함수
max = Math.max(a,b);
위와 같이 if문, 삼항 연산자, Math.max()함수를 이용해서 최댓값을 구할 수 있다.
메모리 관점과 시간 관점으로 봤을 때 Math 클래스는 해당 연산을 최적으로 수행할 수 있도록 Java에서 이미 만들어놓은 알고리즘이기 때문에 맘 놓고 사용해도 될 것 같다.
Methods
max(), min() : 최대, 최소 비교
- 두 수중에 큰수, 작은 수를 반환한다.
- 매개변수로 int, long, float, double형을 지원한다.
- int와 double 형을 비교할 수 있지만, 반환은 당연히 double 형으로 한다.
int max = Math.max(10,5); //10
int min = Math.min(10,5); //5
pow(double a, double b) : 제곱
- a의 b제곱 (a의 b승)을 반환한다.
- 반환형은 double 이다.
double a = Math.pow(2,3);
System.out.println("a = " + a); //a = 8.0
double b = Math.pow(2,-3);
System.out.println("b = " + b); //b = 0.125
double c = Math.pow(3.14,2);
System.out.println("c = " + c); //c = 9.8596
sqrt(double num) : 제곱근
- num의 제곱근을 반환한다.
- 반환형은 double이다.
double num = Math.sqrt(16); // 4.0
abs(int num) : 절댓값
- num의 절댓값을 반환한다.
- 반환형은 int, long, float, double 모두 지원한다.
int abs = Math.abs(-5); // 5
log(double num) :로그
- log() : 밑이 e인 자연로그
- log10() : 밑이 10인 상용로그
- Math.E : 오일러의 수 e = 2.71828...
double a2 = Math.log(Math.E); //1.0
double b2 = Math.log10(1000); //3.0
double e = Math.E;//2.718281828459045
log3(9)를 출력하고자 할 때는 수학에서 아래와 같은 방법을 활용하면 된다.
double log3_9 = Math.log(9)/Math.log(3); //2.0
random() : 랜덤
- 0 이상, 1 미만의 랜덤 한 수 반환 ("1 미만"을 주의해야 한다. 1은 포함하지 않는다.)
- 원하는 수를 얻으려면 Math.random()에 어떤 수를 곱해줘야 한다.
int lotto = (int)(Math.random()*45+1); // 1~45
int thousand = (int)(Math.random()*1000+1); //1~1000
lotto의 경우 Math.random()*45를 하면 0 이상 45 미만의 수를 반환한다.
따라서 45는 포함되지 않고 0은 포함되기 때문에 +1을 해준 것을 볼 수 있다.
이외에도 round(반올림), sin, cos, asin, acos 등 여러 가지 함수들을 지원하니, 필요할 때 더 찾아보면 좋을 것이다.
반응형
'JAVA & Spring' 카테고리의 다른 글
[JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스) (2) | 2023.06.10 |
---|---|
[JAVA] 배열의 길이 length에는 괄호()가 붙지 않고, 문자열의 길이 length()에는 괄호()가 붙는 이유 (0) | 2023.06.03 |
[JAVA] format() 메서드 : 문자열 포맷 지정 / printf() (0) | 2023.06.01 |
[JAVA] 람다식과 스트림 Stream() (0) | 2023.05.25 |
[JAVA] 파일 입출력 (2) | 2023.05.19 |