반복문은 이름 그대로 같은 명령문을 여러번 반복하기 위한 것이다.
반복문은 왜 필요할까?
예를 들어보자.
0부터 100까지를 출력하려고 한다.
지금까지 배운 바로는
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
. . .
System.out.println(100);
이렇게 101번을 직접 작성해서 실행해야 할 것이다.
매우 비효율적이다.
이럴때 반복해서 실행할 명령문을 공식화하면 간단히 해결할 수 있다.
그래서 고안해낸 것이 반복문 이다.
우리가 0부터 100까지 출력하려고 할 때,
다음을 생각할 수 있다.
첫번째, 무엇을 반복 할 것인가?
= 0~100 의 출력문을 반복 할 것이다.
= 0부터 100까지 담을 int 타입의 변수를 지정하고. System.out.println(변수); 를 반복해야 할 것이다.
이 변수는 보통 소문자 i 로 지정한다.
두번째, 변수를 언제까지 반복 할 것인가?
= 변수가 100이 될때까지 반복 할 것이다.
= 변수<=100 라는 식을 세울 수 있다.
세번째, 어떻게 숫자를 0부터 100까지 증가시켜 담을것인가?
= 연산자에서 배운 증감식을 이용한다. ( 증감식 : a++ 는 a+1 )
= 변수++ 를 반복시키면 반복하여 1씩 증가 할 것이다.
위의 조건을 모두 충족시켜 고안된 반복문은 다음과 같다.
for ( 변수선언 및 초기화 ; 조건식 ; 증감식 ) {
실행문;
}
아래의 적용 예시를 보자.
위의 코드를 실행하면, 0부터 100까지 출력된다.
참고로 이클립스에서는 for를 쓴 후 ctrl + space bar 를 누르면 자동완성된다.
처음 보기에는 생소하고 구성요소를 이해하기 어려운것이 당연하다.
이제 어떤 원리로 반복하여 출력되는것인지 그 실행흐름을 알아보자.
실행 순서는 다음과 같다.

각 선언부를 해석하자면 다음과 같다.
1 : 반복시킬 변수 i 를 int타입으로 선언하고 초기값을 0 으로 초기화
2 : i <= 100 의 조건식 작성
3 : 반복하여 실행할 출력문 작성
4 : i 를 1씩 증가시킬 증감연산식 작성
실행 흐름을 해석하자면 다음과 같다.
1 에서 변수 i 가 0 이기때문에 i=0부터 시작한다.
2 i <= 100 의 조건식이 true이기때문에 3 을 수행한다. ( false이면 반복문 탈출 )
3 이 수행된다. 0 이 출력됨.
4 i 를 1만큼 증가시킨다.
2 i = 1 이고, i <= 100 의 조건식에서 true기때문에 3 을 수행한다.
3 이 수행된다. 1 이 출력됨.
4 i 를 1만큼 증가시킨다.
2 i = 2 이고, i <= 100 의 조건식에서 true기때문에 3 을 수행한다.
3 이 수행된다. 2 가 출력됨.
4 i 를 1만큼 증가시킨다.
. . . . i 가 계속 1씩 증가하면서 위의 실행흐름이 반복된다.
그러다가 i가 101이 되는 순간,
2 i = 101 이고, i <= 100 조건식에서 false 이기때문에 반복문을 탈출한다.
for문의 형식은 외우되, 실행 흐름은 이해하는것이 좋다.
위의 실행흐름을 익히고 반복문 for에 대해 충분히 이해했다면,
다음의 문제를 풀어보자.
<1> 10부터 1까지 10,9,8 ... 1 을 반복문 이용하여 출력

변수 선언부에서 i를 10으로 초기화하고
i의 조건을 0초과 로 지정했다.
i를 1씩 감소시키는 i-- 의 증감연산자를 작성했다.
i는 10부터 시작하여 1씩 감소하며 출력되고, i>0 의 조건을 만족하지 못하는 순간 반복문을 탈출한다.
즉, i=0 이 되면 반복문을 탈출하기때문에 1까지만 출력된다.
<2> 1부터 10까지 모든 수를 더한 값을 result 변수에 담은 후 result 출력하기

1부터 10까지 더한 값을 담을 result 변수를 먼저 선언한 후 0으로 초기화했다.
변수 i를 i=1 로 초기화했다.
i의 조건식으로 i<=10 , i 를 1씩 증가시키는 i++ 의 증감연산식을 작성했다.
그리고 result += i 가 반복되도록 실행문을 작성했다.
실행 흐름을 잘 생각해보면 어렵지 않다.
result += i 는 result = result + i 와 같은 식이다.
일단 i 가 1부터 시작했으니, result = result + 1 가 수행된다.
result는 위에서 0으로 초기화했기 때문에 result = 0 + 1 을 수행하여 1이담긴다.
그리고 증감식으로 가 i++ 을 수행하고 i 는 2가 된다.
i<=10을 만족하여 다시 result+=i 를 수행한다.
result 에는 1이 담겨있었으니 result = 1 + 2 를 수행하여 3이 담긴다.
위의 흐름이 계속 반복되면서 result = 1 + 2 + 3 + 4 ... + 10 이 저장된다.
<3> 1~30 중에 2의 배수만 반복문을 이용하여 아래 두 가지 형태로 출력해라
1. 증감식에서만 2의 배수를 해결

2의 배수만 출력되기 위해서는 반복문이 실행될 때 i를 짝수로 설정하고 거기에 2씩 더하면 된다.
우리가 증감식을 i++ 의 형태로 작성했던 것은,
사실은 i 를 1씩 증가시키는 i = i + 1 을 간편히 작성한 것이다.
만약 i 를 2씩 증가 시키고 싶다면 i = i + 2 라는 식을 작성해주면 될 것이다.
2. If 문으로 2의 배수 해결

if 문은 반복문에서도 자주 활용되니 함께 기억해 두는것이 좋다.
i=2 에서부터 30 이하 까지만 반복할건데, i는 1씩 증가시킬것이다.
이렇게만 하면 원래는 i = 2,3,4,5,6 ... ,29,30 형태로 반복된다.
여기에 if 문을 작성했다.
실행 흐름을 살펴보자.
i=2 일때, i<=30 의 조건을 만족한다.
{ } 안의 수행문으로 이동한다.
if 문을 만났다.
if 문의 조건은 i % 2 = 0 즉, " i를 2로 나누어 나머지가 0이라면 " 이다.
2로 나누어 나머지가 0인것은 전부 2의 배수이다.
i=2 이기때문에 조건식을 만족하니, if문 안의 출력문을 수행하고, 2가 출력된다.
i++ 의 증감식을 수행한다.
i = 3이 되고, i<=30 의 조건을 만족하니
{ } 안의 수행문으로 이동한다.
if 문을 만났지만 if ( )의 조건을 만족시키지 못한다. 3은 2로 나누면 1이기 때문이다.
if문을 탈출한다.
다시 i++ 의 증감식을 수행한다.
이런 수행흐름을 거쳐
결국은 2 출력, 4 출력, 6 출력 .... 30 출력 까지 수행한다.
i=31 이 되는 순간 i<=30 의 조건을 만족시키지 못하고 for 문을 탈출한다.
'Java > Standard' 카테고리의 다른 글
Scanner.nextInt() / nextLine() 오류 : 두가지 해결방법 (0) | 2020.06.19 |
---|---|
반복문 : while 과 do~while (0) | 2020.06.18 |
2진수,8진수,16진수의 모든것 (17) | 2020.06.16 |
& 와 && 의 차이점과 활용예시 (5) | 2020.06.16 |
long,float 의 값 뒤에 L,F 을 붙여야 하는 이유 (0) | 2020.06.11 |