숑숑이의 개발일기

본글은 '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
profile

숑숑이의 개발일기

@숑숑-

풀스택 개발자 준비중입니다