JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

프로그래밍/개념 뽀개기

✨ JavaScript에서 짝수, 홀수 판별 방법

lamarcK 2025. 3. 29. 12:29

JavaScript에서 어떤 숫자가 홀수인지 판별하는 가장 일반적이고 간단한 방법은 나머지 연산자(Modulo Operator) % 를 사용하는 것이다. 정수를 2로 나누었을 때 나머지가 0이 아니면 홀수이다.

🧮 방법 1: 나머지 연산자 (%) 사용

원리: 홀수/짝수 판별의 핵심 원리는 수학적인 정의에 있다.

  • 짝수(even number)는 어떤 정수를 2로 나누었을 때 나누어 떨어지는 정수, 즉 나머지(remainder)가 0인 수이다.
  • 홀수(odd number)는 2로 나누어 떨어지지 않는 정수이다. 즉 나머지(remainder)가 1 혹은 -1인 수이다.
  • JavaScript의 나머지 연산자 (%)는 바로 이 나머지 값을 계산해주는 연산자이다.

숫자(number) % 2 를 계산하면 'number를 2로 나눈 나머지'가 직접 구해진다.

따라서, 이 나머지 값이 0이 아닌지를 확인하는 number % 2 !== 0 조건은 짝수, 홀수의 수학적 정의를 코드로 직접 구현한 것이 된다.

function isOddUsingModulo(number) {
  // number를 2로 나눈 나머지가 0이 아닌지 확인한다.
  // 0이 아니면 true(홀수), 0이면 false(짝수)를 반환한다.
  return number % 2 !== 0;
}

설명:

  • number % 2는 number를 2로 나눈 나머지를 계산한다.
  • !== 0은 그 나머지가 0과 다른지 비교한다.
  • 정수일 경우, 홀수는 나머지가 1 또는 -1이 되므로 0과 다르다 (true 반환). 짝수 및 0은 나머지가 0이므로 0과 같다 (false 반환).

예시:

console.log(isOddUsingModulo(3));    // true (3 % 2 = 1)
console.log(isOddUsingModulo(10));   // false (10 % 2 = 0)
console.log(isOddUsingModulo(0));    // false (0 % 2 = 0)
console.log(isOddUsingModulo(-5));   // true (-5 % 2 = -1)
console.log(isOddUsingModulo(-8));   // false (-8 % 2 = 0)

💡 주의: 이 방법은 주로 **정수(Integer)**에 대해 홀/짝을 판별할 때 사용된다. 소수(예: 3.14)에 % 2를 사용하면 예상과 다른 나머지 값(1.14)이 나올 수 있으며, number % 2 !== 0 자체는 true를 반환할 수 있다. 만약 정수임을 명확히 하고 홀수 판별을 해야 한다면, 먼저 Number.isInteger(number)를 사용하여 정수인지 확인하는 것이 좋다.

이러는 가장 큰 이유는 애초에 홀수와 짝수는 정수에만 해당하는 개념이기 때문이다. number % 2가 true나 false인 것이 홀수, 짝수의 조건이 아니다.

function isIntegerAndOdd(number) {
  return Number.isInteger(number) && number % 2 !== 0;
}
console.log(isIntegerAndOdd(3.14)); // false (정수가 아님)
console.log(isIntegerAndOdd(5));    // true (정수이고 홀수)

⚙️ 방법 2: 비트 연산자 (&) 사용

정수의 경우, 비트 단위 AND 연산자 &를 사용하여 홀수 여부를 판별할 수도 있다. 이 방법은 때때로 나머지 연산보다 성능상 이점이 있을 수 있다 (최신 JavaScript 엔진에서는 최적화로 인해 큰 차이가 없을 수도 있다).

원리:

정수를 2진수로 표현했을 때, 가장 오른쪽 비트(최하위 비트, Least Significant Bit, LSB)가 1이면 홀수이고, 0이면 짝수이다.

비트 AND 연산자 &를 사용하여 number와 1을 연산(number & 1)하면, 다른 모든 비트는 0이 되고 최하위 비트만 남게 된다. 따라서 결과가 1이면 홀수, 0이면 짝수이다.

function isOddUsingBitwise(number) {
  // number의 비트와 1의 비트를 AND 연산한 결과가 1인지 확인한다.
  // 결과가 1이면 true(홀수), 0이면 false(짝수)를 반환한다.
  return (number & 1) === 1;
}

설명:

  • number & 1은 number의 이진수 표현과 1의 이진수 표현(...0001) 간의 비트별 AND 연산을 수행한다.
  • 결과적으로 number의 최하위 비트 값만 남게 된다 (홀수면 1, 짝수면 0).
  • === 1은 이 결과가 1과 같은지 비교한다.
  • 이 방법은 양수, 음수 정수 모두에 대해 정확하게 동작한다.

예시:

console.log(isOddUsingBitwise(3));    // true (3 & 1 = 1)  (3 = ...0011)
console.log(isOddUsingBitwise(10));   // false (10 & 1 = 0) (10 = ...1010)
console.log(isOddUsingBitwise(0));    // false (0 & 1 = 0)
console.log(isOddUsingBitwise(-5));   // true (-5 & 1 = 1) (음수는 2의 보수 표현, 최하위 비트가 1)
console.log(isOddUsingBitwise(-8));   // false (-8 & 1 = 0) (음수는 2의 보수 표현, 최하위 비트가 0)

💡 참고: 비트 연산자는 정수에 대해서만 의미 있게 동작하므로, 이 방법은 정수 판별에 더 적합하다. 또한, 코드 가독성 측면에서는 % 연산자가 더 직관적일 수 있다.

✨ BigInt의 경우

매우 큰 정수를 다루는 BigInt 타입의 경우에도 위 두 방법 모두 동일하게 적용할 수 있다. 단, 리터럴과 연산자에 n 접미사를 붙여야 한다.

console.log(123n % 2n !== 0n); // true
console.log((123n & 1n) === 1n); // true

console.log(124n % 2n !== 0n); // false
console.log((124n & 1n) === 1n); // false

결론

일반적으로 나머지 연산자 (%) 를 사용하는 것이 가장 가독성이 좋고 이해하기 쉬운 방법이다. 정수 연산의 성능이 매우 중요한 경우 비트 연산자 (&) 를 고려할 수 있다. 어떤 방법을 사용하든, 정수에 대한 홀/짝 판별인지 명확히 하고 필요하다면 Number.isInteger() 검사를 추가하는 것이 좋다.