"Do while"의 두 판 사이의 차이
(→구조) |
|||
17번째 줄: | 17번째 줄: | ||
위의 예시처럼 do { }라는 부분이 등장하게 되는데 이 부분이 for문, while문이랑의 가장 큰 차이점이라고 할 수 있다. do-while은 프로그램이 반복문을 만나게 되면 | 위의 예시처럼 do { }라는 부분이 등장하게 되는데 이 부분이 for문, while문이랑의 가장 큰 차이점이라고 할 수 있다. do-while은 프로그램이 반복문을 만나게 되면 | ||
− | 조건식의 결과가 참(true)든 거짓(false)든 상관없이 무조건 do 부분을 한 번을 실행하게 된다. 특이한 점이 반복문의 구현부가 먼저 앞에 등장하고 그 다음 while이 등장하는 것이다. 이러한 구조를 가지고 있기 때문에 프로그램에서 do-while문을 실행할 때 구현부에 있는 내용을 먼저 실행을 하게 된다. 그리고 구현부 안에서의 동작에 따라 또는 while의 ( ) 안의 조건식 또는 결과값에 따라서 계속 반복할 것인지 아니면 한 번의 실행으로 종료할 것인지 결정되는 것이다. | + | 조건식의 결과가 참(true)든 거짓(false)든 상관없이 무조건 do 부분을 한 번을 실행하게 된다. 특이한 점이 반복문의 구현부가 먼저 앞에 등장하고 그 다음 while이 등장하는 것이다. 이러한 구조를 가지고 있기 때문에 프로그램에서 do-while문을 실행할 때 구현부에 있는 내용을 먼저 실행을 하게 된다. 그리고 구현부 안에서의 동작에 따라 또는 while의 ( ) 안의 조건식 또는 결과값에 따라서 계속 반복할 것인지 아니면 한 번의 실행으로 종료할 것인지 결정되는 것이다. 자바코드로 예시를 설명하겠다. |
+ | |||
+ | 예시 1) | ||
+ | Scanner sc = new Scanner(System.in); | ||
+ | do { | ||
+ | System.out.println("메뉴를 선택하세요."); | ||
+ | System.out.println("1. 실행\t2. 종료"); | ||
+ | int menu = sc.nextInt(); | ||
+ | switch(menu) { | ||
+ | case 1: | ||
+ | System.out.println("실행했습니다."); | ||
+ | break; | ||
+ | case 2: | ||
+ | System.out.println("프로그램을 종료합니다."); | ||
+ | sc.close(); | ||
+ | System.exit(0); | ||
+ | } | ||
+ | } while(true); | ||
2021년 7월 30일 (금) 10:30 판
Do-while 루프는 대부분의 컴퓨터 프로그래밍 언어에서 주어진 불린 자료형 조건을 기반으로 코드가 한 번 실행할 수 있게 하는 제어 흐름문이다. 대부분의 언어와 달리 포트란의 do 루프(roop)는 실제로는 for 루프와 같다.
개요
while문과 마찬가지로 제어 변수가 없고 반복 횟수가 가변적이지만 조건을 점검하는 시기가 다르다. while문은 루프로 들어가기 전에 조건을 점검하지만 do~while문은 일단 명령을 실행한 후 루프 계속 여부를 점검한다. 그래서 while문은 조건에 따라 한 번도 실행되지 않을 수도 있지만 do~while문은 최소한 한 번은 실행된다는 차이점이 있다. 요약하자면 while문은 선평가 후실행문이며 do~while문은 선실행 후평가문이다. 즉, do~while 문은 문의 고정된 블록을 무한정 실행하는 데 사용한다. do While ... loop는 해당 조건을 평가하고 조건이 참(true)일 경우 그 뒤에 나오는 문을 평가한다. 이 작업이 끝나면 다시 조건을 평가하고 조건이 참(true)일 경우 문을 다시 평가한다. 조건이 거짓(false)일 때까지 이 과정을 계속 반복한다.[1]
부연설명
초기식을 먼저 실행하고 루프로 진입하며 매 명령을 실행할 때마다 증감식을 실행하면 while문으로도 for문과 똑같은 구조를 만들 수 있으며 완전히 같지는 않아서 루프 내부에서 continue명령을 사용할 때의 효과가 약간 달라진다. 반대로 while (조건) 명령; 도 for (;조건;) 명령; 형식으로 변환할 수 있다. 제어문에 따른 실행 속도나 코드의 크기는 거의 차이가 없으므로 실행 속도는 제어문을 선택하는 기준이 아니다. 하지만 어느 쪽이 더 효율적이고 코드의 가독성이 높은지, 부작용은 없는지를 비교해 보면 세가지 반복문 중 가장 적절한 것이 있을 것이다. 세가지 제어 구조의 특징을 잘 파악해야 상황에 가장 적절한 반복문을 선택할 수 있다. 1~100까지 숫자의 합계를 구하는 루프는 for문이 가장 적당하다. 반복 범위가 미리 정해져 있고 이 값이 루프내에서 사용되어야 하므로 제어 변수를 쓰는 것이 효율적이며 코드도 훨씬 더 짧고 명료하다. 예를 들어, 숫자 맞추기 게임에서는 사용자가 입력한 숫자와 컴퓨터가 생각한 숫자를 비교하기 위해 do~while 문을 사용한다. 이 경우 왜 do~while 루프가 가장 적절한가 하면 일단 사용자로부터 값을 입력받아야만 루프를 탈출할 것인지 계속할 것인지를 결정할 수 있기 때문이다. 즉, 조건을 점검하기 전에 일단 사용자로부터의 입력을 최소한 한 번은 먼저 받아야만 하는 것이다. [1]
구조
for문이나 while문의 구조보다 do-while문의 구조는 조금 다르게 생겼다.
while문 구조) do { 구현부(무조건 한 번은 실행됨) } while(조건식이나 그 결과값)
위의 예시처럼 do { }라는 부분이 등장하게 되는데 이 부분이 for문, while문이랑의 가장 큰 차이점이라고 할 수 있다. do-while은 프로그램이 반복문을 만나게 되면 조건식의 결과가 참(true)든 거짓(false)든 상관없이 무조건 do 부분을 한 번을 실행하게 된다. 특이한 점이 반복문의 구현부가 먼저 앞에 등장하고 그 다음 while이 등장하는 것이다. 이러한 구조를 가지고 있기 때문에 프로그램에서 do-while문을 실행할 때 구현부에 있는 내용을 먼저 실행을 하게 된다. 그리고 구현부 안에서의 동작에 따라 또는 while의 ( ) 안의 조건식 또는 결과값에 따라서 계속 반복할 것인지 아니면 한 번의 실행으로 종료할 것인지 결정되는 것이다. 자바코드로 예시를 설명하겠다.
예시 1) Scanner sc = new Scanner(System.in); do { System.out.println("메뉴를 선택하세요."); System.out.println("1. 실행\t2. 종료"); int menu = sc.nextInt(); switch(menu) { case 1: System.out.println("실행했습니다."); break; case 2: System.out.println("프로그램을 종료합니다."); sc.close(); System.exit(0); } } while(true);
각주
- ↑ 1.0 1.1 몽키몽키, 〈반복문(while, do~while, for) 비교 및 차이 개념잡기〉, 《네이버블로그》, 2006-05-16