중첩 루프는 하나의 루프를 다른 루프 안에서 수행할 수 있게 해줍니다. 다차원 구조, 예를 들어 2차원 배열이나 요소 조합을 반복해야 할 때 사용됩니다. 첫 번째 루프는 외부 루프이고, 내부에 있는 루프는 내부 루프입니다.
행렬 또는 그래프와 같은 중첩 구조를 다루어야 할 필요성이 중첩 루프의 등장 배경이 되었습니다. 프로그램 언어, 특히 자바는 배열, 그래프, 그리드 등을 처리하는 작업을 프로그래밍하기 위해 본래 이러한 메커니즘을 지원합니다.
중첩 루프의 사용은 이터레이션 수를 고려하지 않으면 높은 시간 복잡성으로 이어질 수 있습니다. 코드 읽기 어려움 및 인덱싱 오류가 자주 발생합니다. 잘못된 사용은 같은 작업이 여러 번 수행되는 결과를 초래합니다.
코드 예제:
int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); }
주요 특징:
break를 사용하여 두 개의 루프를 동시에 종료할 수 있습니까?
일반 break 문은 내부 루프만 종료합니다. 여러 루프에서 동시에 나가려면 레이블(label)을 사용합니다:
outer: for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (조건) break outer; } }
중첩 루프 때문에 무한 루프가 발생할 수 있습니까?
네, 루프 중 하나의 종료 조건이 잘못 구현되면 무한 루프가 발생합니다. 특히 초기화나 카운터 증가에 오류가 있는 경우에 자주 발생합니다.
내부 루프에서 외부 루프의 변수를 변경할 수 있습니까?
네, 기술적으로는 가능하지만 코드의 가독성을 크게 저하시켜 오류를 초래할 수 있습니다. 이를 피하고 각 루프의 작업을 명확히 분리하는 것이 좋습니다.
2차원 배열을 순회하는데, 모든 곳에서 i와 j 대신 i만 사용:
for (int i = 0; i < n; i++) { for (int i = 0; i < m; i++) {...} }
장점:
단점:
서로 다른 변수 이름 사용:
for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) {...} }
장점:
단점: