최근 JavaScript 기본 문법을 배우면서 진행한 실습 자료들을
GitHub 협업 방식까지 익힌 김에,
스터디원들과 PR을 활용해 코드 리뷰하는 시간을 가졌다.
이번 실습 주제는 다음 네 가지였다.
기능 자체는 어렵지 않았지만,
코드 리뷰를 하면서 다른 사람들이 같은 주제를
나와 다른 방식으로 접근하는 모습을 많이 볼 수 있었다.
그 중 하나가 이 Math 객체였다.
사실 난 아직 Math 라는 걸 아예 몰라서 접근 조차 못했다.
이번 글에서는
Math 객체가 무엇인지에
그리고 왜 단순 계산을 넘어 "가공"의 도구로 사용되는지 정리해보려고 한다.
Math는 JavaScript에 기본 내장된 객체로,
기본적으로 Math.메서드() 형태로 사용된다.
예를 들어,
Math.floor(4.8)
Math.max(10, 20)
무슨 기능이 동작하는지는 후에 주요 메서드 파트에서 다루고
우선 기본 형태만 보겠다.
여기서 볼 수 있는 건:
Math → 객체. → 객체 내부 접근floor, max → 메서드() → 실행객체를 떠올리면 보통 다음과 같은 형태를 생각하게 된다.
const person = {
name: "유관순",
age: 17
};
person 객체 안에 name 속성에 접근할 때는
점 표기법을 사용해 person.name과 같이 작성한다.
Math도 역시 객체이기 때문에 점 표기법으로 내부 요소에 접근한다.
다만 속성 대신 여러 메서드(함수)를 중심으로 구성되어 있다는 점이 특징이다.
하지만 일반 객체와는 분명한 차이점도 존재한다.
| 우리가 만든 객체 (일반적인 객체) | Math |
|---|---|
| 직접 정의함 | JavaScript가 미리 정의한 전역 객체 |
| 속성 + 함수 가질 수 있음 | 주로 함수(메서드) 제공 |
| new로 생성 가능 | 생성 안 함 |
즉, Math는 데이터를 저장하는 객체라기 보다
여러 계산 관련 함수를 미리 담아둔 기능 중심의 객체에 가깝다.
소수점 아래를 버린다.
Math.floor(151.5) //151
무조건 올린다.
Math.ceil(151.5) //152
0.5를 기준으로 반올림한다.
Math.round(3.1) //3
Math.round(151.5) //152
최고점/최저점을 찾는다
Math.max(1, 2, 3) //3
Math.min(4, 5, 6) //4
0 이상 1 미만의 난수를 뽑아낸다.
Math.random()
딱 봐도 알 수 있듯이
조금 특수 케이스이다.
다른 메서드와 엮어서 보자:
Math.floor(Math.random() *10)
Math.random() → 0 ~ 0.999...* 10 → 0 ~ 9.999...floor() → 0 ~ 9 정수Math.random()은 0 이상 1 미만의 값을 반환한다.
여기에 곱하기와 floor()를 조합해 원하는 범위의 정수로 가공할 수 있다.
즉, 이건 랜덤 값을 우리가 원하는 범위로 가공하는 과정이다.
추가로 Math.random()은 매개변수를 받지 않는 메서드이다.
괄호는 함수 실행을 의미하며, 일부 메서드는 값(매개변수)를 전달받기도 한다.
이 매개변수(parameter)라는 건 함수가 값을 전달받는 구조와 관련된 개념이다.
스프린트 강의에서 URL 다루며 잠시 언급되었지만,
범위가 넓어 별도의 정리가 필요해 보인다.
이번 글에서는 우선 Math 객체에 집중하고,
다음 글의 주인공으로 매개변수를 채택하지 않을까 싶다!
우리가 다뤘던 최대/최소, 랜덤, 반올림/정수 관련한 Math 외에도 정말 많다:
그 밖에 반올림/정수 관련해서 trunc()라는 메서드도 추가로 존재하고
거리 계산, 32비트 부동소수점 변환, 32비트 정수에서 앞쪽 0의 개수, 32비트 정수 곱셈 등등
많은 메서드가 존재하지만
사실상 실무/기초 단계에서 많이 쓰는 건:
floorroundceilmaxminrandomabs (절대값)sqrt (제곱근)정도가 90%를 차지한다.
이번에 실습에서는 다음과 같은 작업들이 요구되었다.
이 과정에서 단순한 사칙연산만으로는 부족한 순간이 생긴다.
예를 들어 평균을 소수점 두 자리수만 남기거나
여러 값 중 가장 큰 값을 추출해야 하는 경우다.
90 + 85+ 88
(90 + 85 + 88) / 3
자바스크립트 기본 연산자만으로도 처리할 수 있는 단순한 계산이다.
Math.floor(151.5)
Math.round(151.5)
Math.max(90, 85, 88)
이는 계산 자체가 아니라, 계산 결과를 특정 규칙에 맞게 변형하는 과정이다.
즉, 결과를 원하는 형태로 다듬는 과정에 가깝다.
Math 객체는 계산을 대신하는 것이 아니라,
계산된 값을 원하는 형태로 가공하고 정리하는 역할을 한다.
Math 객체는 기본 연산을 수행하는 도구가 아니라,
연산 결과를 특정 규칙에 맞게 다듬고 변형하는 기능 중심의 객체이다.
Math.메서드() 형태로 사용되는 전역 객체이다.floor, round, max 등은 계산 이후의 처리를 담당한다.random()은 난수를 반환하고, 다른 메서드와 조합해 범위를 가공한다.즉, Math의 핵심은
계산을 대신하는 것이 아니라 계산 이후를 처리하는 역할에 있다.
좋은 글 잘 보고 갑니다! Math가 무엇인지부터 메서드까지 잘 정리되어 있어 저도 몰랐던 부분 알아가네요