자바의 모듈로 연산자

1. 개요

이 짧은 튜토리얼에서는 모듈로 연산자가 무엇인지, 그리고 몇 가지 일반적인 사용 사례에서이를 Java와 함께 사용할 수있는 방법을 보여줄 것입니다.

2. 모듈로 연산자

Java에서 간단한 분할의 단점부터 시작하겠습니다.

나누기 연산자의 양쪽에있는 피연산자의 유형이 int 인 경우 연산 결과는 다른 int입니다.

@Test public void whenIntegerDivision_thenLosesRemainder() { assertThat(11 / 4).isEqualTo(2); }

피연산자 중 하나 이상의 유형이 float 또는 double 인 경우 동일한 나누기가 다른 결과를 제공합니다 .

@Test public void whenDoubleDivision_thenKeepsRemainder() { assertThat(11 / 4.0).isEqualTo(2.75); }

정수를 나눌 때 나머지 나누기 연산을 잃는 것을 볼 수 있습니다.

모듈로 연산자는 정확히 다음과 같은 나머지를 제공합니다.

@Test public void whenModulo_thenReturnsRemainder() { assertThat(11 % 4).isEqualTo(3); }

나머지는 11 (배당금)을 4 (제수)로 나눈 후 남은 것입니다.이 경우 3입니다.

같은 이유로 0으로 나누기가 불가능하기 때문에 오른쪽 인수가 0 일 때 모듈로 연산자를 사용할 수 없습니다.

0을 오른쪽 피연산자로 사용하려고 할 때 나누기와 모듈로 연산 모두 ArithmeticException이 발생합니다.

@Test(expected = ArithmeticException.class) public void whenDivisionByZero_thenArithmeticException() { double result = 1 / 0; } @Test(expected = ArithmeticException.class) public void whenModuloByZero_thenArithmeticException() { double result = 1 % 0; }

3. 일반적인 사용 사례

모듈로 연산자의 가장 일반적인 사용 사례는 주어진 숫자가 홀수인지 짝수인지 알아내는 것입니다.

임의의 숫자와 2 사이의 모듈로 연산의 결과가 1과 같으면 홀수입니다.

@Test public void whenDivisorIsOddAndModulusIs2_thenResultIs1() { assertThat(3 % 2).isEqualTo(1); }

반면에 결과가 0이면 (즉, 나머지가 없음) 짝수입니다.

@Test public void whenDivisorIsEvenAndModulusIs2_thenResultIs0() { assertThat(4 % 2).isEqualTo(0); }

모듈로 연산의 또 다른 좋은 용도는 원형 배열에서 다음 자유 지점의 인덱스를 추적하는 것입니다.

int 값 에 대한 순환 대기열의 간단한 구현 에서 요소는 고정 크기 배열로 유지됩니다.

요소를 순환 대기열로 푸시 할 때마다 이미 삽입 한 항목 수에 1과 대기열 용량을 더한 모듈로를 계산하여 다음 빈 위치를 계산합니다.

@Test public void whenItemsIsAddedToCircularQueue_thenNoArrayIndexOutOfBounds() { int QUEUE_CAPACITY= 10; int[] circularQueue = new int[QUEUE_CAPACITY]; int itemsInserted = 0; for (int value = 0; value < 1000; value++) { int writeIndex = ++itemsInserted % QUEUE_CAPACITY; circularQueue[writeIndex] = value; } }

모듈로 연산자를 사용하여 writeIndex 가 배열의 경계를 벗어나는 것을 방지 하므로 ArrayIndexOutOfBoundsException 이 발생하지 않습니다 .

그러나 QUEUE_CAPACITY 개 이상의 항목을 삽입 하면 다음 항목이 첫 번째 항목을 덮어 씁니다.

4. 결론

모듈로 연산자는 그렇지 않으면 손실 된 정수 나눗셈의 나머지를 계산하는 데 사용됩니다.

주어진 숫자가 짝수인지 홀수인지 알아내는 것과 같은 간단한 작업뿐만 아니라 원형 배열에서 다음 쓰기 위치를 추적하는 것과 같은 더 복잡한 작업을 수행하는 것이 유용합니다.

예제 코드는 GitHub 저장소에서 사용할 수 있습니다.