본문 바로가기
👨‍💻 프로그래밍/Java, Kotlin, Spring

자바 10 - Math 클래스에 있는 매소드 활용

by 개발자 진개미 2021. 4. 20.
반응형

프로그래밍을 할 때는 기본적인 계산을 해야 할 경우가 많다. 더하기, 빼기와 같은 기본적인 산술 연산자를 사용하면 되는 경우도 있지만, 이 보다 조금 더 심화된 수학과 관련된 계산을 하고 싶은 경우도 있다. 이 경우, Math 클래스를 활용한다. 근데, 클래스를 활용한다는 게 뭘까? 

 

1. 클래스를 활용한다는게 뭘까?

2. Math 클래스 안에 있는 프로퍼티(데이터)/매소드

3. 삼각함수 매소드 활용법

4. 지수/로그 매소드 활용법

5. 반올림 매소드 활용법

6. 랜덤 매소드 활용법

7. 기타 매소드 활용법

 


1. 클래스를 활용 한다는게 뭘까?

클래스를 활용한다는 것은, 자바에서 제공하는 클래스나 다른 프로그래머가 만든 클래스를, 그게 어떻게 동작하는지 몰라도 사용할 수 있다는 것이다. 예를 들어, 우리가 자동차를 운전할 때 알아야 할 것은 가속 페달을 누르면 가속하고, 브레이크 페달을 누르면 멈추고, 핸들을 돌리면 방향이 바뀐다는 것이다. 자동차의 작동 원리를 알 필요는 전혀 없다. 

 

클래스를 활용하는 것도 비슷하다. 우리는 Scanner 클래스가 어떻게 유저로부터 데이터를 받아오는지는 몰라도 된다. Scanner 클래스의 활용법만 알면 될 뿐이다. 

 

일반적으로 클래스를 사용한다고 하면 그 클래스 안에 있는 매소드(함수)나 데이터(프로퍼티)를 사용한다는 뜻이다. 즉, 우리가 알아야 할 것은, 매소드가 어떤 값을 받고 어떤 값을 내보내는지, 데이터가 어떤 값인지이다.


2. Math 클래스 안에 있는 프로퍼티(데이터)/매소드

Math 클래스에는 수학적 계산과 관련된 매소드와 데이터가 있다.

 

먼저, 데이터의 경우는 원주율 파이와, 자연상수 e가 있다.

Math.PI; 	// 3.1415926535
Math.E		// 2.7182818

주의할 것은, 파이와 e는 값이 편하지 않는 상수이기 때문에 모두 대문자라는 것이다.

 

다음으로 매소드의 종류는 크게 5가지가 있다.

 

1. 삼각함수 관련된 매소드

2. 지수/로그 관련된 매소드

3. 반올림 관련된 매소드

4. 난수(랜덤으로 숫자)를 만들어 주는 매소드

5. 기타 매소드 (최대, 최소, 절댓값 등)

 

물론, 이 외에도 다양한 매소드가 있지만 가장 자주 쓰는 것들이 이것이다.


3. 삼각함수 매소드 활용법

삼각함수와 관련된 매소드는 8가지가 있다.

 

먼저, ex(double a) -> double 의 의미는, ex라는 매소드가 double 타입을 받고, double 타입을 return 한다는 것이다.

 

sin(doule a) -> double

cos(double a) -> double

tan(double a) -> double

toRadius(double degree) -> double

toDegrees(double radians) -> double

acos(double a) -> double

asin(double a) -> double

atan(double a) -> double

 

각각 사인, 코사인, 탄젠트 값을 리턴하는 매소드와, 도를 라디안으로 변환시켜주고, 혹은 반대로 해 주는 매소드 들이다. 삼각함수를 안다면, 쓰는데 크게 지장은 없을 것이다.

Math.sin(0);		// 0.0
Math.sin(Math.PI/6); 	// 0.5
Math.cos(0);		// 1.0
Math.cos(Math.PI/2);	// 0

4. 지수/로그 매소드 활용법

지수/로그와 관련된 매소드는 5개가 있다.

 

exp(double a) -> double

e의 a제곱을 리턴하는 매소드이다.

log(double a) -> double

자연로그(e를 밑으로 하는 로그) a 값을 리턴하는 매소드이다.

log10(double a) -> double

10을 밑으로 하는 로그 a 값을 리턴하는 매소드이다.

pow(double a, double b) -> double

a 제곱 b (a^b)를 리턴하는 매소드이다.

sqrt(double a) -> double

a의 제곱근을 리턴하는 매소드이다.

 

Math.exp(1);		// 2.71
Math.log(2.71);		// 1.0
Math.pow(2, 3);		// 8.0
Math.sqrt(4);		// 2.0

5. 반올림 매소드 활용법

반올림과 관련된 매소드는 5개나 있다.

 

ceil(double x) -> double

가장 가까운 정수로 올림한다.

floor(double x) -> double

가장 가까운 정수로 내림한다.

rint(double x) -> double

가장 가까운 정수 리턴. 가장 가까운 정수가 2개인 경우, 모조건 짝수 리턴

round(float x) -> int

(int)Math.floor(x+0.5)와 동일

round(double x) -> long

(long)Math.floor(x+0.5)와 동일

 

Math.ceil(2.1);		// 3.0
Math.ceil(-2.1);	// -2.0
Math.floor(2.1)		// 2.0
Math.floor(-2.1)	// -3.0
Math.round(2.0)		// 2

6. 랜덤 매소드 활용법

랜덤으로 숫자를 만들어내는 건 아마 Math 안의 매소드 중에서도 활용도가 가장 높을 것이다.

 

Math.random()은, 0.0과 1.0 (1.0 미포함) 사이의 랜덤 한 double 타입의 숫자를 리턴한다.

 

그렇다면 잠깐, double 값만 리턴한다면, 예를 들어 주사위 게임 프로그램을 만들고 싶으면 어떻게 할까? int 타입의 랜덤 숫자를 원한다면 아래와 같이 하면 된다.

(int)(Math.random() * 10);	// 0과 9 사이의 정수 랜덤하게 리턴

Math.random에 10을 곱하면, 0부터 10.0까지를 (10.0 제외)를 리턴하게 된다. 즉, 1.25, 5.76, 8.98 이런 식이다. 그 상태에서 int로 타입을 변환하게 되면, 뒤의 소수점이 사라져서 결과적으로 0과 9 사이의 랜덤 한 정수를 리턴하게 된다.

 

일반적으로, a와 a+b 사이의 수를 원하면,

a + Math.random() * b;

를 하면 된다.

 

예를 들어, 5와 15 사이의 정수일 경우(15 미포함), 

(int)(5 + Math.random() * 10);

이 된다.


7. 기타 매소드 활용법

마지막으로 기타 유용한 매소드를 알아보자.

 

max(a, b)

두 수 중 더 큰 수를 리턴한다.

min(a, b)

두 수 중 더 작은 수를 리턴한다.

abs(a)

절댓값을 리턴한다.

 

Math.max(2, 3);		// 3
Math.max(2.5, 3)	// 3.0
Math.min(2.5, 3.6)	// 2.5

 

반응형