웹사이트 검색

Java에서 루프를 사용하는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

반복적인 작업을 작성하는 것은 프로그래밍에서 일반적입니다. 한 가지 옵션은 코드 블록을 반복적으로 실행하는 데 필요한 만큼 동일하거나 유사한 코드를 작성하는 것입니다. 이 접근 방식은 읽고 유지하기 어려운 중복 코드를 많이 생성하기 때문에 완벽하지 않습니다. 더 나은 옵션은 루프를 사용하는 것입니다.

루프는 반복되는 프로그램 흐름을 제어하기 위한 구조입니다. 일반적인 루프에는 두 부분이 있습니다. 한 부분은 부울 제어 조건입니다. 다른 부분은 조건이 참인 동안 또는 조건이 거짓일 때까지 실행될 코드 블록입니다. 부울 조건은 코드 블록이 실행될 때마다 재평가됩니다. 루프 종료 기준은 이 튜토리얼에서 배우게 될 각 루프 유형마다 다릅니다.

루프에는 whilefor 루프의 두 가지 주요 유형이 있습니다. 유형은 루프의 구문과 논리에 따라 다릅니다. while 루프는 부울 조건에 따라 다릅니다. 이 조건은 일반적일 수 있으며 참일 때 코드 블록이 반복적으로 실행됩니다. for 루프도 코드 블록을 반복적으로 실행하지만 루프 조건은 일반적으로 정수 변수의 증가 또는 감소에 따라 달라집니다. 이 변수가 특정 목표 값에 도달하면 루프가 중단됩니다.

이 자습서에서는 whilefor 루프를 사용하여 반복 작업을 만들고 각각의 장단점에 대해 알아봅니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • 예제와 함께 Java 프로그램을 실행할 수 있는 환경입니다. 로컬 컴퓨터에서 이를 설정하려면 다음이 필요합니다.\n
    • JDK(Java Development Kit)에서 제공하는 컴파일러와 함께 컴퓨터에 Java(버전 11 이상)가 설치되어 있습니다. Ubuntu 및 Debian의 경우 Java 설치를 위한 다운로드 옵션 단계를 따르십시오.
    • 코드 예제를 컴파일하고 실행하기 위해 이 자습서에서는 Introduction to JShell 가이드를 사용합니다.

    Java 및 객체 지향 프로그래밍에 익숙하며 Java에서 첫 번째 프로그램을 작성하는 방법 자습서에서 찾을 수 있습니다.

    Java의 데이터 유형 이해 자습서에서 설명하는 Java 데이터 유형에 대한 이해.

    while 루프

    while 루프는 일반 부울 조건문을 모니터링합니다. 예를 들어, 조건문은 두 개의 정수 변수가 같은지, 두 개체가 동일한지, 관련이 있는지, null이 아닌지 또는 프로그래밍 방식으로 확인할 수 있는 다른 어떤 것이 있는지 확인할 수 있습니다. 실제로 모든 부울 문을 사용할 수 있으며 이것이 while 루프가 매우 강력하고 보편적으로 사용되는 이유입니다.

    이 섹션에서는 while 키워드를 사용하여 Java에서 첫 번째 프로그래밍 루프를 만듭니다. 단일 후감소 연산을 사용하여 일부 실행 후 현재 루프를 종료합니다. 그것 없이는 루프가 무한히 계속됩니다.

    정보: 이 자습서의 예제 코드를 따라하려면 jshell 명령을 실행하여 로컬 시스템에서 JShell 도구를 엽니다. 그런 다음 jshell> 프롬프트 다음에 예제를 추가하고 ENTER를 눌러 예제를 복사, 붙여넣기 또는 편집할 수 있습니다. jshell을 종료하려면 /exit를 입력합니다.

    이 코드를 테스트하려면 다음 행을 jshell에 붙여넣으십시오.

    1. int x = 3;
    2. while (x > 0) {
    3. System.out.println("x is " + x--);
    4. }

    첫 번째 줄에서 x 변수를 정의합니다.

    루프는 while 키워드로 2행에서 시작합니다. 조건문 (x > 0)는 루프를 제어합니다. x0보다 큰지 여부를 비교합니다. 그 다음에는 코드 블록의 시작을 나타내는 여는 괄호 {가 옵니다. 이 코드 블록은 조건이 참(x > 0)인 동안 반복적으로 실행됩니다.

    코드 블록 내에서 3행의 System.out.println(\x is\+ x--); 문은 x의 현재 값을 >println() 메소드. (System.out.println 문에 대한 자세한 내용은 자습서 How To Write Your First Program in Java를 확인하십시오.) println()에 대한 인수 내에서 x는 코드 x--와 함께 1씩 후감합니다. 실행할 때마다 x1씩 감소합니다.

    코드 블록은 닫는 대괄호 }가 있는 마지막 줄에서 끝납니다. 이것은 또한 루프의 끝입니다.

    jshell에서 이 코드를 실행하면 다음 출력이 인쇄됩니다.

    Output
    x ==> 3 x is 3 x is 2 x is 1

    첫 번째 줄은 x3 값을 수신했음을 확인합니다. 다음 줄에서 x 값이 세 번 인쇄되며 매번 1씩 감소합니다. x3, 21인 세 가지 반복만 있습니다. 조건문 x > 0이 더 이상 충족되지 않기 때문에 x0에 도달하면 루프가 중단됩니다. 이 시점에서 루프가 종료되고 아무 것도 인쇄되지 않습니다.

    앞의 예는 루프를 만드는 일반적인 방법입니다. 루프의 의도는 명확하고 종료 조건은 간단합니다: x > 0. 이론적으로 추가 변수 및 비교(예: x > 0y < 0)를 추가하여 조건을 더 복잡하게 만들 수 있지만 이는 모범 사례로 간주되지 않습니다. 클린 코드 관점에서. 복잡한 조건은 코드를 따르고 이해하기 어렵게 만드는 반면 가치는 거의 없습니다.

    do-while 루프

    do-while 루프는 while 루프보다 덜 인기가 있지만 여전히 널리 사용됩니다. do-while 루프는 while 루프와 유사하지만 코드 블록이 먼저 실행된 다음 루프 조건이 평가된다는 한 가지 주요 측면에서 다릅니다.

    참고로 while 루프는 먼저 조건을 평가하고 조건이 충족되지 않으면 코드 블록을 실행하지 않을 수 있습니다. 그러나 do-while 루프에서는 루프 제어 조건이 평가되기 전에 코드 블록이 항상 한 번 이상 실행됩니다. 조건이 참이면 루프는 더 이상 참이 아닐 때까지 추가 반복을 계속합니다. 이 때문에 do-while 루프는 질문을 하고 정답이 있을 때만 루프가 종료되는 경우와 같은 경우에 유용합니다.

    이 섹션에서는 이전 섹션의 while 루프와 유사한 do-while 루프를 만듭니다. int 변수는 x라고 하며 초기 값은 3입니다. 그러나 이번에는 조건이 반전되고(x < 0) 조건이 평가되기 전에 코드 블록이 실행됩니다.

    jshell을 열고 do-while 루프를 추가합니다.

    1. int x = 3;
    2. do {
    3. System.out.println("x is " + x--);
    4. } while (x < 0);

    이 코드는 이전 섹션의 while 루프와 일부 유사합니다. 먼저, 변수 x의 할당이 있으며 이는 다시 3입니다.

    2행에서 루프는 키워드 do와 코드 블록에 대한 여는 대괄호 {로 시작합니다. 3행에서 x의 값은 println() 메서드를 사용하여 인쇄됩니다. println() 메서드를 사용하면 후감소 연산자 --를 사용하여 x의 값도 감소합니다.

    마지막 줄에는 코드 블록에 대한 닫는 대괄호 }가 있고 그 뒤에 조건문 (x < 0)이 있는 while 키워드가 있습니다. 앞선 while 루프와 다른 부분입니다. 여기에서는 조건이 반대입니다. x0보다 작아야 합니다. 이전 예에서 x0보다 커야 하는 조건이 필요했습니다. 이 변경은 조건이 충족되지 않더라도 코드 블록이 한 번 실행됨을 보여줍니다.

    jshell에서 이 코드를 실행하면 다음 출력이 인쇄됩니다.

    Output
    x ==> 3 x is 3

    첫 번째 줄은 x의 값이 3임을 확인합니다. 두 번째 줄은 x is 3을 인쇄합니다. 이것이 do-while 루프의 특징입니다. 조건(x < 0)이 충족되지 않더라도 코드 블록은 여전히 한 번 이상 실행됩니다. 이 무조건적인 실행이 항상 바람직한 것은 아니므로 do-while 루프를 사용할 때 주의해야 합니다. 이 경고 때문에 do-while 루프는 자주 사용되지 않습니다.

    for 루프

    대체 루프 구조는 for 루프입니다. 또한 조건 하에서 반복적으로 코드 블록을 실행하는 데 사용되지만 while 루프보다 더 많은 옵션이 있습니다. 루프 제어 조건에서 임시 변수를 추가하고 제어 조건을 정의하고 임시 변수의 값을 변경할 수 있습니다. 이러한 방식으로 루프를 제어하는 모든 요소를 결합하여 무언가를 놓치거나 실수할 가능성을 줄입니다. 이를 통해 코드를 깨끗하고 이해하기 쉽게 유지할 수 있습니다. for 루프는 보다 엄격한 스타일을 준수하는 코드를 작성하려는 경우에 더 적합합니다.

    다음은 일반적인 for 루프입니다.

    1. for (int x = 3; x > 0; x--) {
    2. System.out.println("x is " + x);
    3. }

    루프는 첫 줄의 for 키워드로 시작합니다. 괄호 안의 조건문은 세 부분으로 구성됩니다.

    • int x = 3은 변수(x)를 정의합니다. 여기서 임시 변수를 정의하는 것은 루프에만 필요하기 때문에 편리하므로 루프에 통합하는 것이 좋습니다. 반대로 while 루프를 사용할 때는 루프 전에 별도로 변수를 선언해야 했습니다.
    • x > 0은 실행할 코드 블록이 충족되어야 하는 조건입니다. 이 경우 x0보다 커야 합니다. 이 부분은 평가할 조건만 포함하는 while 루프 제어문과 유사합니다.
    • x--는 각각의 성공적인 반복 중에 수행되는 작업입니다. 이 경우 후감소 연산은 각 성공적인 실행 후에 x의 값을 감소시킵니다.

    2행의 System.out.println(\x is\+ x); 문은 println()을 사용하여 x의 값을 인쇄합니다. 방법. 변경되지 않은 x 값을 수신합니다. 반대로 while 루프에서 x의 값을 조작하기 위해 println() 메서드를 사용했습니다. 후감소 연산이 조건문의 세 번째 부분인 x--에서 이미 처리되었기 때문에 여기서는 필요하지 않습니다.

    3행은 닫는 대괄호 }로 코드 블록과 전체 루프 구조를 종료합니다.

    jshell에서 이 코드를 실행하면 다음 출력이 인쇄됩니다.

    Output
    x is 3 x is 2 x is 1

    출력은 코드 블록이 세 번 실행되었음을 확인합니다. 처음에는 x의 값이 3입니다. 두 번째 x2이고 세 번째 x1입니다. 세 번째 이후에 x0이 되고 코드 블록을 실행하지 않고 루프가 종료됩니다(x의 값을 인쇄함).

    for 루프는 while 루프와 동일한 결과를 얻습니다. 성능과 리소스 사용 관점에서 차이가 없어야 하므로 어떤 루프를 사용할지는 대부분 개인 취향의 문제입니다. 그러나 반복 횟수를 알고 있는 경우 일반적으로 for 루프를 사용하면 코드를 더 자세히 따라갈 수 있으므로 선호됩니다.

    foreach 루프

    foreach 루프는 다른 루프와 비슷하지만 가능한 적은 코드로 값 그룹을 반복하도록 특별히 설계되었다는 이점이 있습니다. 값 그룹이 있는 한 값의 수를 추적하거나 반복 진행을 따를 필요 없이 값을 살펴볼 수 있습니다. foreach 루프는 그룹에 값이 있는 경우 값을 하나씩 가져와 사용자에게 제공하도록 합니다.

    대부분의 프로그래밍 언어에는 foreach 루프에 대한 편리한 단축키가 있습니다. Java에는 전용 foreach 키워드가 없지만 대신 for 키워드가 사용됩니다. 그러나 foreach 조건문은 일반적인 for 루프와 다릅니다. 다음에 확인할 수 있습니다.

    foreach 루프로 작업하려면 값 그룹을 사용해야 하며 배열이 이 목적에 적합합니다. 배열은 동일한 유형의 값을 포함하는 객체입니다. 다음 예에서는 int 값을 포함하는 배열을 사용합니다.

    jshellforeach 루프에 대한 다음 코드를 추가합니다.

    1. int[] numbers = {0, 1, 2};
    2. for (int x: numbers) {
    3. System.out.println(x);
    4. }

    첫 번째 줄에서 세 개의 정수(0, 12)를 포함하는 int 배열을 만듭니다.

    foreach 루프는 for 키워드가 있는 2행에서 시작합니다. 그런 다음 콜론이 뒤에 오는 임시 변수 int x를 정의합니다. 콜론은 foreach 작업의 바로 가기로 사용됩니다. (foreach 루프 문은 Java에서 콜론이 사용되는 유일한 위치이기 때문에 고유합니다.) 콜론 뒤에는 배열과 같은 값의 모음이 있습니다.

    foreach 루프 문 뒤에는 numbers 배열의 각 값에 대해 실행될 코드 블록이 있습니다. 이 경우 System.out.println(x); 문은 println() 메서드를 사용하여 x의 값을 인쇄합니다. 숫자 배열의 각 값을 참조합니다.

    jshell에서 위의 코드를 실행하면 다음 출력이 인쇄됩니다.

    Output
    numbers ==> int[3] { 0, 1, 2 } 0 1 2

    첫 번째 줄은 0, 12 값을 포함하는 numbers라는 배열이 정의되었음을 확인합니다. 다음 줄은 0, 12와 같이 각각 새 줄에 배열의 값을 인쇄합니다.

    다른 루프를 사용하는 것은 대부분 개인 선택의 문제이지만 foreach 루프는 값 그룹을 반복하기 위한 사실상의 표준입니다. for 또는 while 루프를 사용하여 foreach 루프의 대안을 직접 만들 수 있지만 노력할 가치가 없으며 데이터 구조에 대한 깊은 이해.

    무한 루프

    무한 루프는 종료되지 않는 for 또는 while 루프입니다. 제어 조건이 항상 참일 때 무한대가 됩니다.

    다음은 무한 while 루프의 일반적인 예입니다.

    1. while (true) {
    2. System.out.println("This will print forever.");
    3. }

    첫 번째 줄은 일반적인 while 루프처럼 보이지만 x > 0과 같은 조건 대신 true 값만 있습니다. 이 경우 제어 조건을 평가해야 할 때 true가 항상 직접 반환됩니다. 이 경우 루프에 대한 종료가 없으므로 영원히 계속됩니다. 두 번째 줄에는 System.out.println(\This will print forever.\); 문이 포함되어 있습니다. println() 메서드를 사용하여 This will print forever. 텍스트를 인쇄합니다.

    jshell에서 위의 코드를 실행하면 코드를 종료할 때까지 다음 출력이 인쇄됩니다. 키보드 조합 CTRL+C를 사용하여 빠르게 종료할 준비를 하거나 터미널을 닫으십시오. 그렇지 않으면 끝없이 계속됩니다.

    Output
    This will print forever. This will print forever. ...

    처음 두 번의 반복만 표시되지만 이 출력은 CTRL+C를 눌러 수동으로 종료할 때까지 계속됩니다.

    예제 무한 루프에서는 부울 문 대신 배치된 단일 true 값으로 인해 이러한 루프를 만들려는 의도가 분명합니다. 이러한 루프는 과거에 널리 사용되었으며 레거시 프로젝트에 존재할 수 있습니다. 여전히 이러한 무한 루프를 만들 수 있지만 타이머 작업과 같이 지속적으로 실행되는 작업을 만드는 더 좋은 방법이 있습니다. 타이머 작업은 더 정교하고 더 많은 옵션을 제공하기 때문에 선호됩니다.

    불행하게도 때때로 무한 루프는 의도적이지 않습니다. 실수를 하여 무한 루프가 발생할 수 있습니다. 다음 코드를 고려하십시오.

    1. int x = 3;
    2. while (x > 0) {
    3. System.out.println("x is " + x);
    4. }

    위의 코드는 이 튜토리얼의 첫 번째 예제와 비슷해 보입니다. 첫 번째 줄에서 값 3을 사용하여 변수 x를 정의합니다.

    2행에는 while 키워드와 x > 0이 참인 동안 루프가 계속되어야 한다는 제어 조건이 있습니다.\

    3행의 System.out.println(\x is\+ x); 문은 println()을 사용하여 x의 값을 출력합니다. 방법. 그러나 이 자습서의 첫 번째 섹션에 있는 while 루프 예제(루프가 세 번 실행된 후 종료됨)와 달리 현재 예제에는 x에 대한 후감소 연산이 없습니다. . 그 때문에 jshell에서 이 루프를 실행하면 다음과 같은 연속 출력이 표시됩니다.

    Output
    x is 3 x is 3 ...

    이 줄은 CTRL+C로 루프를 종료할 때까지 무한 반복됩니다. 이러한 의도하지 않은 무한 루프는 프로그램을 충돌시키거나 프로그램을 실행하는 시스템에 과부하를 일으킬 수 있기 때문에 위험합니다. 그렇기 때문에 루프를 만들 때 주의를 기울여야 하고 실행 가능한 종료 경로가 있는지 확인해야 합니다. 현재 예제에서는 루프 종료 조건 x > 0을 충족하기 위해 각 루프에서 x가 감소하는지 확인해야 합니다.

    결론

    이 자습서에서는 루프 구조를 사용하여 반복 작업을 만들었습니다. whilefor 루프를 사용하는 것이 적합한 경우를 배웠고 이를 사용하여 몇 가지 코드 예제를 작성했습니다. 또한 깨끗한 코드에 대한 모범 사례와 루프와 관련된 일반적인 함정을 피하는 방법을 배웠습니다.

    Java에 대한 자세한 내용은 Java로 코딩하는 방법 시리즈를 확인하십시오.