System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
System.out.println("Hello!");
어떠한 코드를 반복적으로 실행을 해야 한다고 보자.
위의 코드와 같이 단순하게 반복을 하는 방법도 있다. 하지만 코드의 내용이 복잡해지고 양이 방대하게 많아진다면,
그리고 기본적으로 프로그래머는 반복, 막일을 싫어한다.
이런 여러 가지 이유에서 반복문이라는 것을 사용한다.
반복문에는 3가지의 종류가 있다.
- for
-
for (1. 초기화식; 2. 조건식; 4. 증감식) { //3. 반복될 코드 } - for문은 위의 코드와 같이 작성할 수 있다
- 보통 반복의 횟수를 알고 있을 때 사용한다
- 조건식은 반복문이 얼마 동안 반복할 것인지를 설정해 줄 수 있다.
- 중괄호 안의 코드는 조건이 true인 동안 반복될 코드를 작성할 수 있다.
-
for (int i = 0; i < 10; i++) { System.out.println(i); } - 위의 코드는 0~9까지 출력을 해준다
- 초기 화식과 증감식을 설명을 안 했는데 초기 화식은 반복문에 사용될 변수를 초기화해준다.
- 이 변수의 개수는 상관없으며 변수는 for문 안에서만 사용이 가능하다.
- 변수의 선언과 초기화는 변수 밖에서 하는 것과 마찬가지로 [type] [변수명] = [Value]; 작성한다.
- 증감식은 조건식과 연관해서 보면 된다.
- 조건식이 i가 10보다 작은동안, 즉 i가 9가 될 때까지 반복을 하며 10이 되면 반복을 종료하고 반복문을 빠져나간다.
- 조건을 만족하기 위해서 1에서 설정해준 변수에 1씩 증가를 시켜준다.
- 1씩이 아니여도 상관없다. i += 2;라고 한다면 2씩 증가될 것이다.
- 조건식을 확인하고 내용을 실행하고 마지막으로 i에 1을 더해줄 것이다 이러한 순서로 2, 3, 4 이렇게 반복을 하면 i는 계속 증가될 것이고 결국엔 i의 값이 10이 되고 반복문을 종료할 것이다.
- 시작 변수를 어떻게 설정하느냐, 조건식을 어떻게 하느냐에 따라서 출력 결과가 많이 달라지므로 연습을 많이 해봐야 한다.
- 예를 들어 위의 코드에서 조건식의 부분만 i <= 10; 이렇게 만들어준다면 =하나 들어갔을 뿐인데 코드의 결과는 10이 추가로 출력이 된다.
- 이처럼 많이 사용해보고 여러 문제들을 풀어보면서 사용법을 이해하고 이해되지 않으면 외워버리는 것도 방법이다.
- continue
- continue라는 코드를 중간에 넣어주면 '이번 실행은 건너 뛸꺼야 아무것도 하지 마'라는 말과 동일하다
-
for(int i = 1; i <= 10; i++) { if(i % 2 == 0) { continue; //2의 배수는 건너 뛰어라 //i 나누기 2의 나머지가 0이면 2의 배수 } System.out.println(i); } 
- 코드 실행 결과를 보면 알 수 있듯이 if문의 조건이 만족하면 continue해라라고 했고 그 결과 홀수만 출력이 됐다.
- 조건식에서 i를 2로 나눈 나머지가 0이면 continue를 하라고 했는데 결론적으로 2로 나누었을 때 나머지가 0이면 2의 배수이기 때문에 2의 배수(짝수)는 출력되지 않고 홀수만 출력된 것을 확인할 수 있다.
-
- while
-
while(조건식) { //반복될 코드 } - 처음 보는 분들에게는 while이 더 쉬워 보일 수도 있겠다.
- 일반적으로는 반복의 횟수를 모르는 경우 사용된다
- 조건식 안에 Boolean으로 return 되는 값을 넣어주고 return값이 true인 경우 중괄호 안의 코드가 반복된다
-
while(true) { System.out.println("Hello"); } - 위와 같이 코드를 작성할 수 있는 데 따라 해보지 않기를 권장한다.
- 앞서 말했듯이 반복의 횟수를 모르는 경우 사용하며 조건식이 true면 내용을 실행한다. 하지만 위의 코드 어디에도 while문을 빠져 날 수 있는 방법이 없다.
- while문에서 위와 같이 코드를 작성할 경우 무한루프에 빠진다고 하고, while문을 빠져나오지 못하고 계속 while안에 영원히 머무른다는 소리다.
- 코드가 짧고, 복잡하지 않다면 컴퓨터가 힘들어하지 않겠지만 내용이 복잡하고 실행할 내용이 많다면 얼마 가지 않아 다운될 것이다.
- 정지 방법
- Break
- 중괄호 안에서 break를 입력해줄 경우 실행이 되다 break를 만났을 때 while문을 종료하고 빠져나간다
-
while (true) { //Code 1 //Code 2 //Code 3 //Code 4 //Code 5 break; //Code 6 //Code 7 //Code 8 } - break를 만나면 빠져나간다. 그렇다면 break이후의 코드. 즉, code 6부터는 실행되지 않는다는 뜻이다.
- 하지만 이렇게 아무런 조건 없이 break를 잡아준다면 한 번만 돌고 끝날 것이다 그렇게 때문에 조건문(if)을 사용해서 조건문의 return값으로 break를 넣어주는 게 좋다.
-
while(true) { //Code 1 //Code 2 //Code 3 //Code 4 //Code 5 if (/*빠져나갈 조건*/) { break; } //Code 6 //Code 7 //Code 8 } - 위와 같이 작성하면 if의 조건이 만족하기 전까지는 while문을 빠져나갈 일은 없을 것이다.
- 반복문 혹은 switch가 중첩으로 들어가 있다면 label을 붙여서 지금의 위치를 빠져나갈 수 있다.
-
while(true) { [Label Name]:for(int i = 0; i < 2; i++) { if(i == 1) { break [Label Name]; } } } - 라벨의 이름을 정해서 나갈 위치를 잡아줄 수 있다.
- continue도 동일하다.
- 변수 사용
- while문의 소괄호에는 Boolean값이 들어간다고 했는데 그렇다면 변수로도 컨트롤을 할 수 있다.
- 사용방법은 break와 비슷하다
-
boolean flag = true; while(flag) { //Code 1 //Code 2 //Code 3 //Code 4 //Code 5 if (/*빠져나갈 조건*/) { flag = false; } //Code 6 //Code 7 //Code 8 } - 위와 같이 사용이 가능하지만, break는 만난 시점에 바로 빠져나가지만 변수를 저렇게 중간에 사용해줄 경우 변수가 false로 변해도 while의 조건을 인식하는 건 중괄호의 내용이 모두 끝나고 인식을 하기 때문에 flag가 중간에 false라고 바뀌어도 code6~8이 실행되고 flag가 true인지 false인지 확인하고 while문의 처리를 진행하게 될 것이므로 사용의 위치가 중요하다.
- Break
-
- do-while
-
do { //반복 내용 } while (/*조건식*/) - 조건식이 true면 반복 내용을 실행하는 부분은 while문과 비슷하다.
- 다른 점은 코드의 작성 순서를 보고 알 수도 있겠지만 먼저 수행하고 조건을 확인한다.
- 조금 어려울 수도 있는데 그냥 위에서 코드가 쭉 내려오다가 조건에 상관없이 do를 먼저 실행을 해주고 조건식을 확인한다.
-
boolean flag = false; do { System.out.println("true면 실행해"); } while (flag);
- 위의 코드 내용을 보면 알 수 있듯이 do는 조건과 상관없이 무조건 한 번을 실행한다.
- 상황에 맞게 사용하면 된다.
-
'Back-end > JAVA' 카테고리의 다른 글
| 11. 참조 타입(Reference Type) - String (0) | 2021.06.17 |
|---|---|
| 10. 참조 타입(Reference Type) - 개념 (0) | 2021.06.17 |
| -컴파일러 에러 (0) | 2021.06.15 |
| 8. 조건문(if, else, else if, switch) (0) | 2021.06.14 |
| 7. Operator (0) | 2021.06.11 |