목표
자바가 제공하는 제어문 학습
학습할 것
선택문
반복문
과제 마감
2020.12.12 1PM
제어문
제어문은 코딩하면서 가장 많이 쓰이는 문법 중 하나라고 생각한다. 이번주는 제어문 중 하나인 선택문과 반복문을 공부한다!
선택문
'선택문'이라 하면, 가장 먼저 떠오르는 것은 if 그리고 switch이다. 조건에 따라 분기한다.
단순 if문
조건에 따라 단순히 한 단위의 특정 작업을 수행해야 하는 경우 사용하는 if문이다.
if(count < 0) // 조건문
System.out.println(count + "은(는) 음수입니다."); // 조건이 참일 때 수행
이중 if문 (if-else)
조건식의 결과에 따라 특정 작업을 수행해야 하는 경우 사용하는 선택문을 이중 선택문이라 한다.
조건에 따라 서로 다른 문장들을 수행한다.
if(num%2==0){
System.out.println(num + "은 짝수입니다.");
}
else{
System.out.println(num + "은 홀수입니다.");
}
다중 if문 (if-else if)
다중 선택을 제공하는 선택문이다. 조건이 거짓일 경우 다시 선택 조건을 제시하여 조건의 결과에 따라 처리하며, 결과가 거짓일 경우 반복적으로 다시 선택 조건을 제시할 수 있는 구조의 선택문이다.
if(grade>=90)
System.out.println("A학점 취득");
else if(grade>=80)
System.out.println("B학점 취득");
else if(grade>=70)
System.out.println("C학점 취득");
else
System.out.println("학점 취득 실패);
내포된 if문
if문 내에 또 다른 if문이 내포될 수 있다. 앞에서 기술한 3가지 if문들은 자유롭게 서로 내포되어 사용될 수 있다.
if(score>=80){
System.out.println("우수 학점군!");
if(score>=90)
System.out.println("A학점입니다.");
else
System.out.println("B학점입니다.");
}
else{
if(score>=60){
System.out.println("보통 학점군!")
if(score>=70)
System.out.println("C학점입니다.");
else
System.out.println("D학점입니다.");
}
else{
System.out.println("학점 취득 실패");
}
}
switch문
다중 선택 기능을 제공하는 switch문이다. if-else-if 문을 사용해서 다중 선택을 구현할 수도 있지만, 구조가 복잡해진다.
if의 조건식은 참 또는 거짓을 가지며, switch는 정수값을 가지는 정수식이 포함된다.
우선, 정수식이 평가되며 평가된 값에 적합한 case절이 수행된다. case절의 정수값은 반드시 상숫값이어야하며 변수가 사용될수 없다.
string str="";
switch(month)
{
case 12:
case 1:
case 2:
str = "겨울입니다.";
break;
case 3:
case 4:
case 5:
str = "봄입니다.";
break;
case 6:
case 7:
case 8:
str = "여름입니다.";
break;
case 9:
case 10:
case 11
str = "가을입니다.";
break;
default:
str = "1~12월을 벗어난 달입니다.";
break;
}
System.out.println(str);
반복문
자바 언어에서 제공하는 반복문은 while문, do-while문, for문이 있다. 세가지 모두 반복의 기능을 제공하지만 각각 고유의 특징이 있다. 목적에 따라 적합한 반복문을 선택해야 한다.
- while문 : 반복의 횟수가 결정되지 않은 상태에서 특정 조건이 만족할 떄까지 반복하는 경우에 적합한 반복문
- do-while문 : while문과 같으나 조건을 나중에 검사하는 반복문. 즉 이 반복문은 조건을 나중에 검사함으로써 최소한 한 번은 수행되는 반복문
- for문 : 반복의 패턴(특정 숫자만큼 증가 또는 감소)과 반복 횟수가 고정된 경우에 적합한 반복문
while문
특정 조건이 만족하는 동안 지정된 영역을 반복할 수 있다. 우선 조건식을 검사하여 그 결과가 참이면 반복될 문장 블록을 수행하고, 거짓이면 while문을 빠져나온다. 만일 처음 조건을 검사할 때 조건이 거짓이라면 반복될 문장들은 한 번도 수행되지 않는다.
조건식이 참일 동안 반복 부분을 계속해서 수행하기 때문에, 대부분의 while문의 사용에서는 반복 블록 내에 조건식의 조건을 거짓으로 만들 수 있는 부분이 포함되는 것이 일반적이다.
int sum=0, count=1;
while(count<=10){
sum += count;
count += 1;
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
do-while문
while문과 유사하지만 조건식의 위치가 다른 형태의 반복문으로 do-while문이 있다. 조건을 먼저 검사하는 while문과 달리 조건을 나중에 검사하는 반복문이다.
do-while문은 반복될 문장이 먼저 실행되고 조건이 나중에 검사되기 때문에 반복될 문장이 최소 한 번은 실행될 수 있다.
int sum=0, count=1;
do{
sum = sum + count;
count = count + 1;
} while(count<=10);
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
for문
for문은 일정한 패턴으로 증가 또는 감소하면서 지정된 횟수만큼 반복 수행하는 형태에 적합한 반복문이다. for문은 초기식, 조건식, 증감식으로 구성되며 각각의 식은 다음과 같은 기능을 담당한다.
- 초기식 : 주로 반복 변수의 초기화를 위해 사용. 초기식은 처음 한 번만 수행
- 조건식 : 조건을 나타내며, 조건식이 참일 동안 반복 부분 수행
- 증감식 : 반복 부분을 수행한 후에 반드시 수행되는 문장. 주로 조건식에 변화를 주는 수식으로 구성
int sum=0;
for(int i=1; i<=10; i++) // 초기식에서 변수 선언 가능
sum = sum + i;
int a,b;
for(a=1, b=10; a<b; a++,b--){ // 초기식과 증감식에 하나 이상의 문장 사용 가능.
System.out.println("a=" + a);
System.out.println("b=" + b);
}
boolean flag=false;
int i=1;
for(;!flag;){ // 초기식과 증감식 생략 가능.
System.out.println("i의 값은 " + i + "입니다.");
if(i==10) flag=true;
i++;
}
for(; ;) // 모두 생략 가능. 무한 반복.
제어의 이동
제어를 이동한다는 말은 프로그램의 실행 순서를 인위적으로 변경할 수 있다는 의미이다. 자바 언어는 프로그램에서 제어를 이동하기 위해 제한된 형태의 명령어인 break, continue, return문을 제공한다.
레이블 블록
자바는 프로그램의 특정 부분을 레이블 블록으로 지정할 수 있다. break문과 continue문은 단독으로 사용될 수도 있고, 레이블 블록과 같이 사용 될 수도 있다.
aa: {
System.out.println("block aa");
}
bb: {
System.out.println("block bb");
cc: {
System.out.println("block cc");
}
}
dd: for(int j=1; j<10; j++){
sum = sum+j;
}
ee: while(j<10){
System.out.println(j + "block ee");
ff: while(k<10){
......
}
}
...
break문
반복문이나 레이블 블록문 내에서 break문이 사용되면, 프로그램의 실행은 반복문이나 레이블 블록문을 벗어나게 된다.
[1] 레이블이 없는 break문의 사용
레이블이 없는 break문의 사용은 반복문 안에서만 사용될 수 있다. 반복문 내에서 break문을 실행하면 break문을 내포하고 있는 반복문을 벗어나게 되며, 반복문이 아닌 레이블 블록에서 break문이 사용되면 오류가 발생한다.
for(int j=1; j<10; j++){
for(int k=1; k<10; k++){
if(k==5) break; // break를 내포하는 반복문 밖으로 제어 이동
...
[2] 레이블이 있는 break문의 사용
레이블이 있는 break문의 사용은 반복문과 레이블 블록 안에서 모두 사용될 수 있다. 중첩된 반복문 내에서 레이블을 이용한 break문을 사용하면 지정된 블록 밖으로 제어를 이동시킬 수 있다. 레이블 블록 안에서 break문이 사용될 경우에는 반드시 레이블명을 같이 사용해야 한다. 레이블명이 같이 사용되지 않으면 오류가 발생한다.
aa: for(int j=1; j<10; j++){
bb: for(int k=1; k<10; k++){
if(j==5 && k==5) break aa; // aa 블록 밖으로 제어 이동
...
cc:{
...
if(a==10) break cc; // cc 블록 밖으로 제어 이동. 레이블 블록에서 사용될 경우에는 레이블명 지정
...
continue문
continue문은 프로그램의 제어를 반복 블록의 처음으로 이동시키는 역할을 수행한다. break문과 달리 continue문은 레이블과 상관없이 반드시 반복문 안에서만 사용되어야 한다.
[1] 레이블이 없는 continue문의 사용
레이블이 없는 continue문은 내포하고 있는 반복문 블록의 처음으로 제어를 이동시킨다.
while(true){
if(j%2==0) continue; // 제어를 반복문의 처음으로 이동
sum = sum + j;
j++;
}
[2] 레이블이 있는 continue문의 사용
레이블이 있는 continue문은 중첩된 반복문에서 바깥쪽의 반복문 처음으로 제어의 이동이 가능하다. 중첩된 반복문에서 continue를 사용하려면 반복문 블럭을 레이블로 지정해야 한다.
aa: while(true){
...
bb: while(true){
...
if(j%2==0) continue;
if(k==10) continue aa; // 제어를 aa 블록의 처음으로 이동
...
cc: {
...
dd: {
...
if(j%2==0) continue cc; // 반복문 블록이 아니므로 오류 발생
...
옵션 과제는 다음 포스트에서 다룬다!
참고 : 처음 시작하는 JAVA 프로그래밍
'Java Live Study' 카테고리의 다른 글
Live Study 8주차 : 인터페이스 (0) | 2021.01.16 |
---|---|
Live Study 7주차 : 패키지 (0) | 2021.01.02 |
Live Study 6주차 : 상속 (0) | 2020.12.26 |
Live Study 5주차 : 과제 (0) | 2020.12.18 |
Live Study 5주차 : 클래스 (0) | 2020.12.18 |