본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다.
제어문이란?
프로그램의 실행 순서를 제어하는 것. 자바에는 2개의 선택 제어문(if, switch)와 3개의 반복 제어문(for, while, do-while)으로 구성된 5개의 제어문과 2개의 제어 키워드(break, continue)가 존재한다.
5개 제어문의 공통적인 특징은 모두 중괄호가 있다는것. 중괄호 내부 실행문이 1개일 경우에는 중괄호를 생략할 수 있다.(컴파일러가 자동으로 삽입해준다)
if(3>5){
System.out.println("1");
}
// 위의 코드를 아래와 같이 중괄호를 생략하여 사용할 수 있다
if(3>5) System.out.println("1");
if문
if문은 조건식에 따라 실행문의 실행 여부를 결정하는 선택 제어문이다. 크게 3가지 유형으로 나뉜다
if 단일 구문
조건식이 true일 때 중괄호 안을 실행한다. (조건식이 false라면 중괄호 안을 실행하지 않는다)
boolean flag = false;
if(flag) System.out.println("Hi");
if-else 구문
if 구문의 조건식이 true일때 if 구문의 중괄호를 실행. false일 때 else 구문의 중괄호가 실행된다. 삼항연산자와 상호 변환할 수 있다. else문이 있으므로 반드시 하나의 실행문은 실행된다.
int a = 5, b = 0;
if(a > 5) {
b = 10;
} else {
b = 20;
}
System.out.println(b); // 20
// 삼항연산자로 변환
a > 5 ? b = 10 : b = 20;
if-else if-else
N개의 조건식과 N+1의 중괄호를 포함하고 있는형태. else if 구문은 개수에 상관없이 추가가 가능하다. 조건식을 검색할 때 위에서부터 검사를 수행하므로 처음 참이 되는 블록 하나만 실행된다는 것을 기억하자. (다수의 조건식이 참이 나올 수 있는 때는 순서에 유의해 작성하자)
int a = 85;
if(a >= 70) {
System.out.println("C"); // 처음 조건식이 참이므로 탈출한다. 순서에 유의
} else if(a >= 80) {
System.out.println("B");
} else if(a >= 90) {
System.out.println("A");
}
if(a >= 90) {
System.out.println("A");
} else if(a >= 80) {
System.out.println("B");
} else if(a >= 70) {
System.out.println("C");
}
switch 선택 제어문
switch 문은 점프 위치 변숫값에 따라 특정 위치(case)로 이동해 구문을 실행하는 선택 제어문이다. default: 구문을 포함할 수 있다.(if문의 else 구문과 비슷한 기능). switch문에서 단 하나의 실행문만 실행하게 하려면 break 제어문을 사용하면 된다. if문과 달리 switch문의 조건문에는 boolean 값이 아닌 정수, 문자, 문자열로 비교한다.
int score = 77;
// score 점수를 이용하여 학점을 출력하는 switch문 작성
switch (score/10){
case 10: case 9:
System.out.println("학점은 A"); break;
case 8:
System.out.println("학점은 B"); break;
case 7:
System.out.println("학점은 C"); break;
case 6:
System.out.println("학점은 D"); break;
}
for 반복 제어문
for 문은 실행 구문을 반복적으로 수행하는 반복 제어문으로, 일반적으로 반복 횟수가 정해질 때 주로 사용한다.
기본 문법
for(초기식; 조건식; 증감식) {
// 실행구문; 조건식이 true인 동안 실행
}
- 초기식 : for 문이 시작될 때 딱 한번 실행되고 다시는 실행되지 않는다. 따라서 for 문 안에서만 사용할 변수는 주로 초기식에서 초기화한다
- 조건식 : 실행 구문으로 들어가기 위한 유일한 출입구. for문이 끝나는 위치는 조건식이다.
- 증감식 : for 문의 실행 구문이 모두 수행된 후 닫힌 중괄호를 만나면 다음 반복을 위해 다시 이동하는 위치. 매회 반복이 수행될 때 마다 호출된다
int i; // 변수를 for문의 외부에서 선언. for문이 종료된 이후에도 변수는 사라지지 않음
for(i = 0; i < 3; i++) {
System.out.println("실행");
}
System.out.println(i); // 3
for문의 실행순서 : 초기식 > 조건식 > 실행구문 > 중괄호 닫힘 > 증감식 > 조건식 > 실행구문 > 중괄호 닫힘 > 증감식 > 조건식 >...
컴파일러는 for문의 소괄호 내부에 2개의 세미콜론이 있는지만 문법적으로 점검하므로 초기식, 조건식, 증감식을 생략해도 문법오류가 발생하지 않는다. 그 결과 특수한 for문 형태가 가능하다.
- 조건식 생략시에 컴파일러는 true를 자동으로 삽입한다 (무한루프)
while 반복 제어문
중괄호 안의 실행 구문을 반복적으로 실행하는 반복 제어문. 소괄호 안의 조건식이 true인 동안 반복이 지속된다.
기본 문법
// 초기식;
while(조건식) {
// 실행 구문;
// 증감식;
}
- 초기식과 증감식은 불필요 시 생략할 수 있다.
- 초기식은 while문 실행 이전에 정의되어야 한다.
- 일반적으로 while문은 반복 횟수를 정하지 않고 특정 조건까지 반복하고자 할 때 주로 사용한다
- if문과 달리 while문에서는 조건식을 생략할 수 없다
while문의 실행순서 : 조건식(참) > 실행구문 > 중괄호 닫힘 > 조건식(참) > 실행구문 > 중괄호 닫힘 > 조건식(거짓) > 종료
int num = 0, sum = 0;
while(sum < 100) {
sum += num;
num++;
}
do-while 반복 제어문
기본 문법
초기식;
do {
실행구문;
증감식;
} while(조건식);
- 제어문들 중 유일하게 세미콜론을 붙인다
- 일단 실행 한 후 조건식을 검사한다. (= 최소 반복 횟수가 1이다)
- while문보다 1회 더 많이 실행하는것이 아니다.
do-while문의 실행순서
실행 구문 > 조건식(참) > 실행 구문 > 조건식(거짓) > 종료
제어 키워드
break 제어 키워드
break는 if문을 제외한 가장 가까운 중괄호 하나를 탈출하는 제어 키워드다. 일반적으로 break는 반복문에서 특정 조건을 만족할 때 반복문을 탈출하는 데 사용한다.
for(int i = 0; i < 10; i++) {
if(i == 5) {
break;
}
System.out.println(i); // 0, 1, 2, 3, 4
} // break로 탈출하는 중괄호
break로 다중 반복문을 탈출하는 방법
방법1) break 수행 전 바깥쪽 조건식이 false가 되도록 값 변경
for(int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
if(j == 5) {
i = 100; // break 실행전 i값 변경
break;
}
}
}
=> break로 탈출하는 중괄호는 동일하지만, 이후 i 값을 사용한 조건식에서 false가 나와 결국 이중 for문을 탈출한다
방법2) break + label(레이블)
- 다중 반복문을 한 번에 탈출하는 자바의 공식적인 방법.
- 레이블 명은 개발자가 임의로 지을 수 있다.
- 레이블 다음에는 반드시 콜론(:)을 표시한다.
out: // 레이블 위치 지정(break하고자 하는 반복문 앞에 레이블 표기)
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if(j == 5) {
break out; // out 레이블이 달린 반복문 탈출
}
}
} // break out으로 탈출하는 중괄호
continue 제어 키워드
반복문 실행 도중 continue를 만나면 실행해야 할 코드가 남아있더라도 마치 닫힌 중괄호를 만난 것처럼 동작한다. continue는 주로 반복 과정에서 특정 구문을 실행하지 않고 건너뛰고자 할 때 사용한다. 단독으로 사용될 때는 거의 없으며, if 문과 함께 사용해 특정 조건에서 실행 구문을 건너뛰고자 할 때 사용한다.
for(int i =0; i<10; i++) {
if(i == 5) {
continue; // i = 5일때 건너뛴다.
}
System.out.println(i); // 0,1,2,3,4,6,7,8,9
}
continue도 break와 마찬가지로 if 문을 제외한 가장 가까운 중괄호의 닫힌 괄호의 역할을 수행한다.
for(int i=0; i<2; i++) {
for(int j=0; j<4; j++) {
if(j == 2) {
continue;
}
System.out.println(i + ", " + j);
} // (0,0), (0,1), (0,3), (1,0), (1,1), (1,3)
}
continue도 continue+Label 문법을 사용할 수 있다.
'Backend > JAVA' 카테고리의 다른 글
[Java] #5.2 참조자료형 - 문자열 (0) | 2023.05.21 |
---|---|
[Java] #5.1 참조 자료형 - 배열 (0) | 2023.05.16 |
[JAVA] #3 연산자 (0) | 2023.05.10 |
[JAVA] 변수와 자료형 (0) | 2023.04.29 |
[JAVA] 프로그래밍 언어와 자바 (0) | 2023.04.18 |