[Java] 제어문

Published: by Creative Commons Licence

조건문

조건문은 조건을 제시한 뒤 만족하거나 불만족할 때의 분기를 제어한다. 조건식은 반드시 boolean으로 평가되는 표현식이어야 한다.

if-then-else

if ~ else if ~ else 구간 중 만족하는 조건이 있다면 블록을 실행하고 if문을 끝낸다. if문 안에 if문을 또 작성할 수 있다.

if (조건식) {
    실행 블록
} else if (조건식) {
    실행 블록
} else {
    실행 블록
}
String str = "hello";
if ("hello".equals(str)) {
    if (str.length() == 5) {
        System.out.println("is 'hello'");
    } else if (str.length() > 5) {
        System.out.println("something wrong");
    }
} else {
    System.out.println("is not 'hello'");
}

switch-case

조건 1개로 제어 분기. 단, 조건은 int로 변환 가능한 타입과 String(JDK1.7 이상부터), enum 변수만 가능하다.

switch (조건) {
case 레이블1:
    실행 블록;
    break;
case 레이블2:  
    실행 블록;
    break;
default: // 위에 열거된 case에 모두 해당되지 않으면 실행(if문의 else와 같다)
    실행 블록;
    break;
}
char character = 'A';
switch (character) {
case 'A':
    System.out.println("A");
case 'B':
    System.out.println("B");
    break;
} // case 'A'에 break가 없어서 case 'B'도 같이 실행된다.

반복문

for loop

특정 실행 코드 블록을 원하는 횟수만큼 반복 제어

for (루프 헤더) {
    루프 바디(실행 블록)
}

루프 헤더는 초기식; 조건식; 증감식; 구조로 작성하며, 루프 바디는 루프 헤더의 조건식이 true로 평가될 때 실행하는 코드가 위치한다.

byte[] bytes = "한글나라".getBytes();
for (int i = 0; i < bytes.length; i++) {
    System.out.println(bytes[i]);
}
for (;;) {
    // some...one?
}

이렇게 하면 무한 루프가 된다.

향상된 for문 enhanced for loop statement

for (variable ele : locationEle) { // locationEle : 배열 또는 컬렉션
    루프 바디(실행 블록)
}
int[] n = new int[] {40, 20, 10, 50, 30, 60, 35, 41, 23, 78} ;

// n의 배열 길이만큼 루프를 돌되 각 사이클마다 i에 n의 요소를 할당한다.
for (int i : n) {
    System.out.println(i);
}

다음처럼 배열이나 컬렉션을 인라인으로 선언하여 사용하기도 한다.

for (String i : new String[] { "+", "-", "*", "/" }) {
    // ...
}

while

조건식이 true면 실행문을 반복한다.

while (조건식) {
    실행문
}
int n = 1;
while (n < 11) { // 조건식
    System.out.println(n);
    ++n;
}

아래는 무한 루프에서 탈출 분기를 설정하는 방법.

while (true) {
    ...

    if (.....) {
        break;
    }
}

do…while

while과 비슷하지만 실행문을 우선 실행 후 조건식을 평가한다.

do {
  실행문
} while (조건식);
int n = 1;
do {
    System.out.println(n);
    ++n;
} while (n<=10);

점프문

break

현재 위치에서 가장 가까운 switch 혹은 반복문을 탈출(중단)한다.

for (int i = 1; i < 11; i++) {
    if (i == 5) {
        break;  
    }
    System.out.println(i);
}    //1,2,3,4

continue

현재 자신이 속한 반복문 처음으로 되돌아간다. 증감식이 존재하면 한 번 수행한다.

for (int i = 1; i < 11; i++) {
    if (i == 5) {
        continue;  
    }
    System.out.println(i);
}
// 1,2,3,4,6,7,8,9,10

label

제어문에 이름을 부여하고 지정한 제어문을 바로 탈출하거나 되돌아간다.

반복문에서 사용

switchfor와 같은 방식이라 생략함.

// for문에 loop1 이라는 이름을 지정
loop1: for (int i = 2; i <= 9; i++) {
    for (int j = 1; j <= 9; j++) {
        if (j == 5) {
            break loop1;    // loop1 탈출
            //break;        // for j 탈출
            //continue loop1;    // loop1의 다음 반복(회차)으로 이동
            //continue;        // for j 의 다음 반복으로 이동
        }
        System.out.println(i + "*" + j + "=" + i * j);
    } // end of for j
    System.out.println();
} // end of loop1

다중 if문에서 탈출하는 용도로 사용

int n = 10;
hello: if (n > 0) {
    System.out.println("야");
    if (n == 10) {
        System.out.println("왜");
        break hello; // hello if를 탈출
    }
    System.out.println("호 나는"); // 실행되지 않음
}

특정 블록을 탈출

char c = 'A';
yoohoo: {
    if (c == 'A') {
        System.out.println("유후~");
        break yoohoo; // yoohoo 블록을 탈출
    }
    System.out.println("여기 오면 안 돼"); // 실행되지 않음
}