제어문

주8·2023년 1월 5일
0

Java 코드의 흐름을 제어하는 데 사용할 수 있는 명령문을 제공하는데 이것을 제어문이라고 한다.
이는 프로그램의 원활한 흐름을 다양하게 제공하기 위함이며, 5개의 제어문과 2개의 제어 키워드가 있다.

  • 조건문: if, switch
  • 반복 제어문(Loop문): for, while, do-while
  • 제어 키워드(Jump문): break, continue

조건문


if문

if문은 특정 조건에 따라 프로그램을 제어하는 조건문이다.
if문의 조건식을 통해 boolean(true 또는 false)값을 얻는다.

  • 기본 if문, if-else문, if-else-if문, 중첩 if문 4가지 유형이 있다.
  • 기본 if문: 가장 기본적인 조건문이다. 조건식이 true이면 if문의 코드블럭{ }의 실행 구문이 실행된다.
if(조건식){
	실행 구문;
}

if-else문

if-else문은 if 조건이 true이면 if 코드블럭이 실행되고, false이면 else 코드블럭이 실행된다.

if(조건식){
	실행 구문; //조건이 true일 때 실행
}else{
	실행 구문; //조건이 false이면 실행
}

if-else if-else문

if-else if-else문은 여러 else if문이 체인처럼 포함된 if문이다.
else문은 if문이나 else if문 조건이 모두 false이면 실행된다.

if(조건식1){
	실행 구문; //조건식1이 true일 때 실행
}else if(조건식2){
	실행 구문; //조건식2가 true이면 실행
}else if(조건식n){
	실행 구문; //조건식n이 true이면 실행
}else{
	실행 구문; //조건식들이 모두 false이면 실행
}

중첩(Nested) if문

중첩 if문은 if문 안에 또 다른 if문을 중첩해서 넣을 수 있으며, 중첩 횟수는 거의 제한이 없다.
하지만 중첩 if문이 많을 수록 프로그램 흐름이나 조건 제어의 복잡도가 높아지기 때문에 지양해야 한다.

if(조건식1){
	실행 구문; //조건식1이 true일 때 실행
    if(조건식2){
    	실행 구문; //조건식2가 true이면 실행
    }else{
    	실행 구문; //조건식2가 false이면 실행
    }
}else{
	실행 구문; //조건식1이 false이면 실행
}

if문 코드블럭{}

if문의 조건이 true일 경우 실행되는 코드블럭을 중괄호({})로 감싸는 부분은 단일 실행구문의 경우 Optional로 제외해도 오류는 발생하지 않는다.


switch문

Switch문은 if-else if문과 유사하다. case문을 통해 여러 조건과 코드 블럭을 포함시킬 수 있다.

  • if-else if문 대신 switch문을 사용하면 코드 가독성을 향상시킨다.
  • case문의 변수는 byte, short, char, int 또는 enumeration(열거형)과 Java 7버전부터는 문자열 타입도 지원된다.
  • case문의 종료는 ‘:’ 이어야 한다.
  • case문의 코드 블럭은 비어있어도 컴파일 오류가 발생하지 않는다.
  • case문의 코드 블럭에 break문이 없을 경우 조건이 일치해도 다음 case문이 실행된다.
  • break: switch문이나 반복문을 강제로 빠져나오게 한다.
  • default: if문의 else를 의미하며 case문과 일치하지 않을 때 실행된다.
  • 특정변수를 반복적으로 비교해야 할 경우 if문보다는 switch문을 사용하는게 효과적이다.
  • if문은 종적인 관계로 비교하기 때문에 조건이 많아질수록 실행 속도가 현저하게 떨어지게 된다. 대신 switch문은 횡적인 관계로 비교할 수 있다.

중첩 switch문

switch문 안에 또다른 switch문을 중첩해서 넣을 수 있다.


반복문

조건식이 true일 동안 반복문의 코드 블럭을 반복적으로 실행할 때 사용한다.
반복문은 3가지 유형이 있고, 각 유형별로 구문 및 조건을 확인하는 시간 차가 있다.

  • for문
  • while문
  • do-while문

for문

  • 동일하거나 유사한 문장을 지정한 수만큼 반복 수행
  • 한 라인의 코드에 for문에서 사용할 변수를 초기화하고 조건을 확인하고 증가/감소할 수 있다.
  • 수행되는 내용이 단일 행일 때는 블럭 생략 가능
  • 초기화는 for문 실행 시작 시 한번만 실행
  • 초기화와 증감식에는 콤마(,)를 사용하여 여러 항목 삽입 가능
  • 조건식이 비어 있을 경우 무한 루프로 동작한다.
  • 증감식의 경우 조건이 만족할 때까지 실행된다.
  • break: for문을 강제로 빠져나오게 한다.
  • continue: 실행 순서를 for문의 ‘}’로 옮겨간다.
for(초기화;조건식;증감식){
	실행 구문 //조건식이 참이면 실행
}
  • 예제
int sum = 0;
for(int i=1; i<=10; i++){
	sum += i;
}
System.out.println("for문 결과 : " + sum);

[결과값]------------------
for문 결과 : 55
  • 변수를 두 개 이상 사용하여 반복 제어할 경우 ‘,’를 구분자로 사용하여 변수를 초기화하고 업데이트 한다.
for(int i=0, j=100; i<=j; i+=2, j-=3){
	// 코드 블록
}

중첩 for문

for문 안에 for문을 추가하여 중첩으로 실행할 수 있다.

int width = 10;
int height = 5;
    
for(int row=0; row<height; row++){
	for(int col=0; col<width; col++){
		System.out.print("*");
	}
	System.out.println();
}
    
[결과값]---------------------------
**********
**********
**********
**********
**********

For-each Loop (Enhanced for loop)

  • For-each loop 또는 Enhanced for loop(향상된 for 루프)문은 J2SE5.0부터 도입되었다.
  • 배열 또는 컬렉션의 element(요소)를 하나씩 꺼내와서 반복처리하는 for Loop이다.
  • 기본 for문처럼 원하는 요소로 이동하여 처리할 수 없지만, 배열이나 컬렉션의 요소를 순회하여 처리할 때는 사용하는 것이 좋다.
for(데이터타입 변수명:배열 또는 콜렉션){
	실행구문;
}
    
String[] names = {"홍길동", "김철수", "이순신"};
for(String name:names){
	System.out.println(name);
}

while문

  • 조건식이 true일 동안 반복 수행하는 명령으로 반복 횟수를 미리 알 수 없는 경우나 무한 반복 수행시 사용한다.
  • break 명령으로 Loop 작업을 강제 종료하고 블록을 빠져나온다.
while(조건식){
	실행 구문 //조건식이 true일 동안 실행
}

while문, 중첩 while문

int i = 0;
while (i < 5) {
	System.out.println("i -> " + i);
	i++;
}
    
[결과값]--------------------
i -> 0
i -> 1
i -> 2
i -> 3
i -> 4

while문 안에 while문을 추가하여 중첩으로 실행할 수 있다.

int colLength = 3;
int rowLength = 10;
int colCount = 0;
int rowCount;
while(colCount < colLength){
	rowCount = 0;
	while(rowCount < rowLength){
		System.out.print("*");
		rowCount++;
	}
	System.out.println();
	colCount++;
}
    
[결과값]-------------------------
**********
**********
**********

do ~ while문

while문과 흡사하며, while문이 실행되기 위해 선행되어야 하는 명령을 실행 후 그 데이터를 이용하여 반복작업을 처리하고자 할 경우 사용한다.

  • do {..}블록 안의 내용을 먼저 실행 후 조건식을 검사하기 때문에 조건식과 상관없이 무조건 한 번은 실행된다.
  • while, for loop문은 zero/many iterative loop, do~while문은 one/many iterative loop
do{
	실행 구문 //조건식이 true일 동안 실행
}while(조건식);
  • 예제
int num = 0;
do {
	System.out.print(num + " ");
	num++;
}while(num < 3);
 
[결과값]---------------
0 1 2

제어 키워드


continue keyword

  • 반복문을 실행하는 중에 continue keyword를 만나면 반복문의 시작점으로 이동하여 명령을 실행시키는 강제성이 있는 keyword
  • 잘못 사용할 경우 프로그램의 흐름에 오류가 발생할 수도 있으므로 사용시 주의해야 한다.
  • while, for, do~while문의 코드 블럭내에서 사용하며 반복문을 벗어나지 않는다.

break keyword

  • break keyword는 반복문 수행 도중 강제적으로 loop를 종료시키는 키워드로 특정 조건에 해당 loop문을 강제 종료할 경우에 사용한다.
  • while, for, do~while문의 코드 블럭내에서 사용

레이블을 이용한 제어

반복문에 레이블을 지정하여 break와 continue 명령어에 레이블을 지정하면 해당 위치로 이동된다.

public static void main(String args[]){
	//레이블 first
	first:
	for(int i=1; i<5; i++){
		//레이블 second
		second:
		for(int j=1; j<3; j++){
			System.out.println("i = " + i + "; j = " + j);
			if(i == 2){
				//현재 loop를 종료하고 first 레이블의 loop가 종료된다
				break first;
			}
		}
	}
}
profile
웹퍼블리셔의 백엔드 개발자 도전기

0개의 댓글