04. Java - ★조건문과 반복문★
안녕하세요 오늘은 코딩의 🌹🌹🌹 이라고 불리는 조건/반복문을 공부하려고 합니다. 조금 코드가 길다고 생각하면 무조건 하나씩 있는 자슥... 이거때문에 맨날 코딩포기하고 싶네요(따흐흑흫그..ㅠ) 오늘 열심히 공부해보아요 😊😊
✅ 00. 코드 실행 흐름 제어
자바 프로그램은 main() 메소드의 시작 중괄호 ( { ) 에서 끝 중괄호 ( } )까지 위에서부터 아래로 실행 하는 흐름을 가지고 있다. 이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이 흐름 제어문(이하 제어문)이다.
우선 실습에 들어가기전에 가장 중요한게 코드 실행의 흐름이라고 생각합니다. if문이 한개의 코드안에서 많이 사용되거나 (구조체, 상속, DB연동)등 다양한 변수가 다중으로도 발생할 수 있기 때문에 확실하게 알고갑시다!
✅ 01. 조건문/반복문/선택문/흐름제어
제어문은 조건식과 중괄호 { } 블록으로 구성되는데, 조건식의 연산 결과에 따라 블록 내부의 실행여부가 결정된다. 제어문의 종류는 다음과 같다.
조건문 | 반복문 | 선택문 | 흐름제어 |
if 문, if-else 문, else if 문 | for 문, while 문, do-while 문 | switch-case 문 | continue, break |
제어문 블록이 실행 완료된 후 경우 다시 제어문 처음으로 돌아갈지, 아니면 제어문 블록을 빠져 나와 정상 흐름으로 다시 돌아올지는 어떤 제어문을 사용하느냐에 달려 있다. 조건문일 경우는 정상 흐름으로 돌아오지만 반복문일 경우는 제어문 처음으로 다시 되돌아가 반복 실행한다. 이것을 루핑이라고 한다.
✅ 02. if 문
if문이란?
if 문은 조건식의 결과에 따라 블록 실행 여부가 결정됩니다.
조건식에는 boolean 변수나 연산식이 올 수 있으며, 중괄호 { } 블록 내에 실행문이 하나밖에 없다면 중괄호를 생략할 수 있습니다.
조건문이 여러 개인 if 문도 있는데 else if는 상위 조건식이 false일 경우 평가되고, else if가 true이면 해당 블록이 실행됩니다.
else if의 수는 제한이 없으며, 여러 개의 조건식 중 true가 되는 else if 블록만 실행하고 전체 if문을 벗어나게 됩니다.
다음코드는 if문과 else 블록이 함께 사용되어 조건식의 결과를 볼수 있는 실행 블록입니다. score =75; 이기때문에 1,2번째 조건식은 75라는 값이 만족하지 못해서 False 임으로 3번째 조건식인 else if (score >= 70) 까지 내려오고 조건식에 만족해서 true 로 인해 결과값이 실행되고 조건문을 빠져나오게 됩니다.
다음은 if문 블록 내부에 또 다른 if 문을 사용한 경우 입니다. 이것을 중첩 if 문이라고 부르는데, 중첩의 단계는 제한이 없습니다.
현재 코드를 분석해 보면 Math.random() 메소드를 활용하였는데, 이 메소는 0.0 <= ~ <= 1,0 사이의 double 타입의 난수를 리턴합니다. 그러면 이제 코드 실행과정을 보겠습니다.
1. (int)Math.random() *20 + 81 메소드로 인해 변수 score 는 정수형숫자로 0 <= ~ <= 1 사이의 *20 의 값이 +81 이 되어서 난수로 리턴됩니다.
2. 문자형 변수 grade를 생성합니다.
3. 외부 if 문을 먼저 보겠습니다. score >= 90 일때, 첫번째 내부 if 문으로 들어가고 false시 외부 else 문 score >= 85 으로 들어 가는 조건문이 구현되어있습니다.
4. 첫번째 외부 if문이 true 일시에 if문에 들어가 조건문을 실행합니다. false 시 외부 else문으로 들어가 조건문을 실행합니다.
현재 점수는 82점이 나와서 외부 if문 조건식에 성립하지 않습니다. 따라서 외부 else문으로 내려와 내부에 있는 내부 else 문이 실해되어서 학점이 B가 나오게 되었습니다.
✅ 03. Switch 문
Switch문이란?
if 문은 조건식의 결과가 true,false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 else if를 반복적으로 추가해야 하므로 코드가 복잡해진다. 그러나 switch 문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if 문보다 코드가 간결해진다.
switch 문은 괄호 안의 변수값에 따라 해당 case로 가서 실행문을 실행시킨다. 만약 변수값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. default가 필요 없다면 생략 가능하다.
간단한 switch 문이다. 숫자 3이 나와서 case 3의 값이 출력되었다.
공부하면서 알게 된 사실인데 case 에 여러가지 조건을 넣고 싶을때는 이렇게 -> 화살표 표시를 하면 가능합니다!
(또한 앞에서 공부했듯이, 실행문이 하나만 있을 경우에는 중괄호는 생략해도 된다고 합니다. ~~~)
✅ 04. for 문
for문이란?
프로그램을 작성하다 보면 똑같은 실행문을 반복적으로 실행해야 할 경우가 많이 발생한다. 이때 코드를 그대로 작성해야 한다면 코드 양이 엄청 늘어날 것이다. 이런 경우 for 문을 사용하면 코드를 획기적으로 줄일 수 있다.
for 문이 처음 실행될 떄 초기화식이 제일 먼저 실행된다. 그런 다음 조건식을 평가해서 true이면 실행문을 실행시키고, false이면 for 문을 종료하고 블록을 건너뛴다. 조건식이 true가 되어 실행문을 모두 실행하면 증감식이 실행된다. 그리고 다시 조건식을 평가하게 된다. 평가 결과가 다시 true 이면 실행문 -> 증감식 -> 조건식으로 다시 진행하고, false 이면 for 문이 끝나게 된다.
간단한 반복문 예제이다. 1~10까지 출력값이 나오게 된다.
for 문 역시 또 다른 for 문을 내포할 수 있는데, 이것을 중첩된 for 문이라고 한다. 이 경우 바깥 for 문이 한번 실행할 때마다 중첩된 for 문은 지정 횟수만큼 반복하고 다시 바깥 for 문으로 돌아간다. 중첩 for 문이 필요한 가장 간단한 구구단을 출력해봤습니다.
✅ 05. while 문
while문이란?
for 문이 정해진 횟수만큼 반복한다면, while 문은 조건식이 true일 경우에 계속해서 반복하고, false가 되면 반복을 멈추고 while 문을 종료한다.
while 문이 처음 실행될 때 조건식을 평가한다. 평가 결과가 true 이면 실행문③을 실행한다. 실행문이 모두 실행되면 조건식으로 되돌아가서 조건식을 다시 평가한다. 다시 조건식이 true라면 실행문 -> 조건문으로 진행하고, false 라면 while 문을 종료한다.
다음 예제는 while문을 통해서 간단한 0~10 까지의 숫자가 나오게 구현해보았다.
다음 예제같은 경우에는 while문을 통해서 true 일때 계속해서 조건식이 반복되도록 구현했습니다.
1. int sum = 0, int i = 1; 로 설정한다.
2. while문을 활용하여 반복문 조건식을 만든다.
3. i의 초기값이 1 이고, i 값이 100이하일때까지 반복문 조건식이 실행된다.
4. sum = sum+i 라는 코드가 조건식이 false 이 될때까지 실행된다. (이때 while 문이 실행되고 있을동안 값은 저장된다.)
5. 다음 표를 보고 코드실행 결과를 확인해보자
i | sum = sum + i | sum |
1 | 1 = 0 + 1 | 1 |
2 | 3 = 1 + 2 | 3 |
3 | 6 = 3 + 3 | 6 |
4 | 10 = 6 + 4 | 10 |
· · · · · | · · · · · | · · · · · |
99 | 4950 = 4851 + 99 | 4950 |
100 | 5050 = 4950 + 100 | 5050 |
✅ 06. do while 문
do - while문이란?
do - while문은 조건식에 의해 반복 실행한다는 점에서는 while 문과 동일하다. while 문은 시작할 때부터 조건식을 평가하여 블록 내부를 실행할지 결정하지만, 경우에 따라서는 블록 내부를 먼저 실행시키고, 실행 결과에 따라서 반복 실행을 계속할지 결정하는 경우도 있다.
작성 시 주의할 점은 while () 뒤에 반드시 세미콜론 ( ; ) 을 붙여야한다.
이번에는 Scanner를 이용해서 메세지를 입력하면 동일하게 문장이 나오게 반복문을 구현했으며, do { } 구문에서 키보드로부터 값을 읽고 while 문에 입력한 키보드값이 "q" 가 아니라면 계속해서 반복할 수 있게 구현했습니다.
✅ 07. break / continue 문
break란?
break 문은 대개 if 문과 같이 사용되어 조건식에 따라 for 문과 while 문을 종료한다.
만약 반복문이 중첩되어 있을 경우 break 문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료시키지 않는다. 중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름을 붙이고 'break 이름'을 사용하면 된다.
continue란?
continue 문은 반복문인 for 문, while 문, do-while 문에서만 사용되는데, 블록 내부에서 continue 문이 실행되면 for 문의 증감식 또는 while 문, do-while 문의 조건식으로 바로 이동한다. continue 문은 특정 조건을 만족하는 경우에 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다.
이 코드는 int i =1 부터 10 까지 후위 증감 연산자(저번실습용어 써먹기 ㅋㅋ)로 1씩 커질때 i가 2로 나누었을때 나머지가 0이 아닐때 즉, 홀수있때 continue 하게 되어있다 즉, 홀수는 나오지 않고 다음 반복으로 넘어가기 때문에 다음과 같이 10까지의 짝수만이 출력되게 된 것이다.