HOWTO · JavaScript
JavaScript의 모듈로 연산자(%)
이 튜토리얼에서는 JavaScript에서 모듈로 연산자(%)를 사용하는 방법을 설명합니다.
이 페이지의 내용
JavaScript의 % 연산자는 나눗셈 후의 나머지를 반환합니다. 양수끼리 계산할 때는 흔히 모듈로라고 부르는 연산과 결과가 같은 경우가 많지만, 음수 피제수를 사용하면 차이가 드러납니다. JavaScript의 나머지는 피제수의 부호를 따릅니다. 이 글에서는 문법, 특수한 숫자 값의 경우, 일반적인 활용 패턴을 살펴봅니다.
JavaScript % 연산자가 반환하는 값
유한한 숫자의 경우 a % b는 몫 a / b를 0을 향해 버림한 뒤의 나머지를 반환합니다. 10 % 3에서는 몫이 3이고 나머지는 1입니다. 결과의 부호는 피제수(a)를 따르므로 -10 % 3은 -1입니다. 이 부호 규칙 때문에 JavaScript의 %는 나머지 연산자이며, 수학적 모듈로 연산처럼 항상 음이 아닌 결과를 내지는 않습니다.
문법과 기본 예제
피제수, %, 제수 순서로 씁니다. 즉, dividend % divisor입니다. 이 연산자는 소수를 포함한 숫자 피연산자를 받습니다. 식에서는 왼쪽 값이 오른쪽 값으로 나뉘며, 결과는 코드에서 저장하거나 비교하거나 다른 계산에 전달할 수 있는 숫자입니다. 아래 예제는 각 결과를 이름이 있는 상수에 할당하고 두 값을 콘솔에 출력합니다.
const wholeRemainder = 10 % 3;
const fractionalRemainder = 5.5 % 2;
console.log(wholeRemainder);
console.log(fractionalRemainder);
첫 번째 결과는 1이고 두 번째는 1.5입니다. 5.5에는 2가 두 번 들어가고 1.5가 남기 때문입니다. 제공된 런타임 실행에서도 이 두 출력인 1과 1.5가 확인되었습니다.
음수와 경계 사례
나머지는 피제수의 부호를 따릅니다. 따라서 10 % 3은 1, -10 % 3은 -1, 10 % -3은 1입니다. 음수인 피제수를 제수로 나누어 나머지 없이 딱 나누어떨어지면 -4 % 2처럼 음의 0이 나올 수 있습니다. 0의 부호가 중요하다면 Object.is(-4 % 2, -0)으로 비교할 수 있습니다.
피연산자 중 하나가 NaN이거나 피제수가 무한대이거나 제수가 0 또는 -0이면 JavaScript는 NaN을 반환합니다. 유한한 피제수와 무한대 제수를 사용하면 피제수가 그대로 반환되므로 5 % Infinity는 5입니다. 이러한 결과는 JavaScript의 숫자 나머지 연산 규칙에 따른 것이며, 이 패킷에 포함된 실행에서 관찰된 결과는 아닙니다.
% 연산자의 일반적인 활용
정수 입력의 짝홀을 확인할 때는 짝수에 n % 2 === 0, 홀수에 n % 2 !== 0을 사용합니다. 음의 정수에서도 나머지가 0 또는 -1이므로 이 방법은 사용할 수 있습니다. 입력이 소수이거나 숫자 문자열일 수 있다면 정수의 짝홀을 검사하기 전에 입력을 검증하거나 정규화하세요.
유한한 숫자에서 value % 1은 부호가 있는 소수 부분의 나머지를 구합니다. 예를 들어 5.5 % 1은 0.5이고 -5.5 % 1은 -0.5입니다. 음수에서 양수인 소수 부분을 얻으려면 % 1의 결과가 항상 음이 아니라고 가정하지 말고 명시적인 정규화 규칙을 정하세요.
0 이상의 정수인 분을 시와 분으로 나누려면 hours = Math.floor(minutes / 60)과 remainingMinutes = minutes % 60을 사용합니다. 예를 들어 135분은 2시간 15분이 됩니다.
반복문에서 세 번 돌 때마다 작업을 실행하려면 i % 3 === 0인지 확인하세요. 배열의 두 항목을 번갈아 선택하려면 round가 1부터 시작할 때 (round - 1) % players.length를 사용합니다. 먼저 1을 빼면 첫 차례의 인덱스가 0이 됩니다. 각각의 패턴은 양수인 간격과 비어 있지 않은 배열을 전제로 합니다.
나머지와 수학적 모듈로
수학적 모듈로 연산은 일반적으로 양의 모듈러스에 대해 0 이상이고 모듈러스보다 작은 값을 반환합니다. 반면 JavaScript의 %는 피제수의 부호를 따르므로 -10 % 3은 -1입니다. 유한한 양수 모듈러스 n의 경우 ((a % n) + n) % n 식을 사용하면 유한한 a를 음이 아닌 모듈로 형태의 결과로 정규화할 수 있습니다. 예를 들어 모듈러스가 3일 때 -10은 2로 변환됩니다. 양의 모듈러스라는 전제를 명시하세요. 이 패턴은 임의의 제수에 대해 %를 대체하는 일반적인 방법이 아닙니다.