어렵지만 하나하나 이해해가며 쌓는 성취감!
자바스크립트에서의 Math는 수학적 계산을 도와주는 빌트인 객체.
이 객체에는 숫자와 관련된 여러 가지 유용한 기능들이 들어 있어 !
쉽게 말하면, Math는 자바스크립트에서 수학 문제를 풀 때 사용할 수 있는 도구들이 모여있는 수학 도구 상자와 같아 :)
1. Math 객체의 개념
Math는 자바스크립트에서 내장 객체(Built-in Object)로, 별도로 선언하지 않고 바로 사용할 수 있어.
이 객체에는 수학적 계산을 위한 함수와 상수들이 포함되어 있어요.
예시:
Math.random() // 0과 1 사이의 난수를 생성
Math.PI // 원주율 3.14159...
Math.pow(2, 3) // 2의 3승 (2 * 2 * 2)
let randomNumber = Math.random(); // 0 이상 1 미만의 난수 생성
console.log(randomNumber); // 예: 0.7324
Math 객체는 자바스크립트에서 내장 객체이기 때문에, 그냥 Math.함수() 형식으로 바로 사용할 수 있습니다.
예를 들어, Math.random()처럼 Math 객체의 메소드를 직접 호출하면 됩니다.
중요한 점
- Math 객체는 생성자 함수가 아니기 때문에, new Math()처럼 객체를 생성할 필요는 없어요.
- Math는 전역 객체로 바로 사용이 가능하며, 메소드들을 직접 호출해서 사용할 수 있습니다.
따라서, Math.random(), Math.abs(), Math.ceil() 등의 메소드도 직접 Math.메소드명() 형식으로 바로 호출하시면 됩니다.
2. 주요 하위 개념
- 상수 (Constants)
- Math.PI: 원주율 (약 3.14159...)
- Math.E: 자연상수 (약 2.71828...)
- 수학적 함수들
- Math.abs(x): 숫자의 절대값 (예: -5의 절대값은 5)
- Math.ceil(x): 소수점을 올림 (예: 3.2는 4로 변환)
- Math.floor(x): 소수점을 내림 (예: 3.8은 3으로 변환)
- Math.round(x): 반올림 (예: 3.6은 4로 변환)
- Math.max(x, y, z): 가장 큰 값 (예: 2, 5, 1 중에서 5)
- Math.min(x, y, z): 가장 작은 값 (예: 2, 5, 1 중에서 1)
- Math.abs(x)는 "주머니에서 동전이 떨어졌을 때, 위로 향한 면을 기준으로 동전이 얼마나 떨어졌는지" 계산하는 것과 비슷해요.
- Math.ceil(x)는 "여행지까지 가는 길이 3.2시간이라면, 딱 맞춰서 4시간이 걸린다고 보는 것"과 같죠.
- 난수 생성
- Math.random(): 0 이상 1 미만의 임의의 난수를 생성합니다.
- Math.floor(Math.random() * 10): 0부터 9까지의 정수 난수 생성
- 거듭제곱과 제곱근
- Math.pow(x, y): x의 y 승 (예: 2의 3승은 8)
- Math.sqrt(x): x의 제곱근 (예: 9의 제곱근은 3)
- Math.pow(x, y)는 "돈을 모은다고 생각할 때, 한 번에 모은 돈이 계속 증가하는 것" 같아요.
- Math.sqrt(x)는 "사각형의 넓이가 주어졌을 때, 한 변의 길이를 구하는 것"과 같아요.
- 삼각 함수
- Math.sin(x): x의 사인 값
- Math.cos(x): x의 코사인 값
- Math.tan(x): x의 탄젠트 값
실무에서는 어떻게 쓰일까 ?
1. 코드에서의 사용 예시
1.1. 난수 생성
자주 사용하는 Math.random() 함수는 난수를 생성할 때 유용합니다.
예를 들어, 게임에서 아이템 랜덤 획득이나 UI에서 랜덤 효과를 적용할 때 사용될 수 있어요.
// 0과 1 사이의 난수 생성
const randomNum = Math.random();
console.log(randomNum); // 예: 0.8565
// 1부터 100 사이의 난수 생성
const randomInt = Math.floor(Math.random() * 100) + 1;
console.log(randomInt); // 예: 73
1.2. 반올림 또는 내림
가격 계산, 예를 들어 상점의 할인 가격 계산에서 Math.round(), Math.ceil(), Math.floor()를 자주 사용해요.
// 상품 가격 할인 후 반올림
let price = 19.99;
let discountedPrice = price * 0.8; // 20% 할인
console.log(Math.round(discountedPrice)); // 16
// 배송비 계산에서 올림 처리 (올림이 필요한 경우)
let weight = 3.2; // 3.2kg
let shippingCost = Math.ceil(weight) * 10; // 1kg당 10원
console.log(shippingCost); // 40원
1.3. 최댓값, 최솟값 구하기
Math.max()와 Math.min()은 여러 값 중에서 최댓값이나 최솟값을 찾을 때 사용됩니다.
예를 들어, 비밀번호 길이 제한 또는 배열에서 가장 큰 값 찾기에 유용해요
// 여러 학생 점수 중 최고점과 최저점 찾기
let scores = [88, 92, 75, 68, 85];
let maxScore = Math.max(...scores); // 최고 점수
let minScore = Math.min(...scores); // 최저 점수
console.log(`최고 점수: ${maxScore}, 최저 점수: ${minScore}`);
2. 실무에서의 활용 예시
2.1. 쇼핑몰에서 가격 처리
쇼핑몰 웹사이트에서 가격 계산시, 가격을 반올림하거나 내림하여 표시합니다.
// 예시: 상품 가격이 19.99원이면, 20원으로 반올림하여 표시
const productPrice = 19.99;
const roundedPrice = Math.round(productPrice);
console.log(`상품 가격은 ${roundedPrice}원입니다.`);
2.2. 게임에서 난수 사용 (아이템 드랍)
게임에서 아이템을 랜덤으로 드롭할 때, 아이템 드랍 확률을 Math.random()으로 처리할 수 있습니다.
// 예시: 0.1 확률로 특별 아이템을 드랍
const dropChance = Math.random();
if (dropChance < 0.1) {
console.log("특별 아이템 드랍!");
} else {
console.log("일반 아이템 드랍.");
}
2.3. 설문조사에서 응답 선택
설문조사에서 무작위 응답자 선택을 위해 난수를 사용할 수 있습니다.
const respondents = ["홍길동", "김철수", "이영희", "박민수", "조하나"];
const randomIndex = Math.floor(Math.random() * respondents.length); // 0 ~ 4 사이의 정수
const selectedPerson = respondents[randomIndex];
console.log(`${selectedPerson}님이 선택되었습니다!`);
3. 실무에서 Math 객체를 쓸 때의 팁
- 성능 고려: Math.random() 같은 함수는 성능에 큰 영향을 미치지 않지만, 반복적으로 호출하거나 수백만 번의 계산이 필요한 경우 성능을 최적화할 수 있는 방법을 고려해야 합니다.
- 랜덤 값의 신뢰성: Math.random()은 완전히 무작위는 아니기 때문에, 암호학적으로 안전한 난수를 생성하려면 crypto.getRandomValues()와 같은 API를 사용해야 할 수 있습니다.
- 범위 벗어난 값 처리: Math.min()과 Math.max()는 유효하지 않은 값이 있을 때 -Infinity 또는 Infinity를 반환할 수 있으므로 이를 처리하는 로직이 필요할 수 있습니다.
이와 같이 Math 객체는 코드에서 계산을 효율적으로 처리할 수 있게 도와주는 중요한 도구로, 다양한 실무 환경에서도 사용됩니다!
예시 코드를 알아보자 !
// 0과 1 사이의 랜덤 숫자
const randomNumber = Math.random();
console.log(randomNumber); // 예: 0.5678
// 절대값
const absValue = Math.abs(-10);
console.log(absValue); // 10
// 올림
const ceilValue = Math.ceil(4.1);
console.log(ceilValue); // 5
// 내림
const floorValue = Math.floor(4.9);
console.log(floorValue); // 4
// 반올림
const roundValue = Math.round(5.5);
console.log(roundValue); // 6
// 최대값
const maxValue = Math.max(10, 20, 30);
console.log(maxValue); // 30
// 최소값
const minValue = Math.min(10, 20, 30);
console.log(minValue); // 10
// 거듭제곱
const powValue = Math.pow(3, 2);
console.log(powValue); // 9
// 제곱근
const sqrtValue = Math.sqrt(16);
console.log(sqrtValue); // 4
// 원주율
const piValue = Math.PI;
console.log(piValue); // 3.141592653589793
'Studying > JavaScript' 카테고리의 다른 글
자바스크립트 공부하기 - 콜백함수 (0) | 2025.03.23 |
---|---|
자바스크립트 공부하기 - 화살표 함수 💭 (0) | 2025.03.23 |
자바스크립트 공부하기 - DOM part의 classList (0) | 2025.03.22 |
자바스크립트 공부하기 - 진짜 매일 헷갈리는 innerHTML vs textContext (0) | 2025.03.21 |
자바스크립트 공부하기 - JSON (0) | 2025.03.20 |