본문 바로가기
자바

[Java] 자바의 제어문2, 조건문

by 책 읽는 개발자_테드 2020. 12. 12.
반응형

제어문

자바 프로그램을 시작하면 main()의 시작 중괄호 '{'에서 시작해서 끝 중괄호 } 까지 위에서 아래로 실행하는 흐름을 갖는다.

이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 하는 것이 제어문이다.

 

제어문의 구성: 조건식과 중괄호{} 블록으로 구성되며, 조건식의 연산 결과에 따라 블록 내부의 실행 여부가 결정된다.

//1.정상흐름

제어문(조건식){ //2.조건이 성립되면 3-1로 이동, 조건이 성립되지 않으면 3-2로 이동.
	//3-1 제어문 내부 흐름
}

// 3-2 정상흐름

 

제어문의 종류: 조건(선택)문과 반복문이 있다. 조건문에는 if문, switch문이 있고, 반복문에는 for문, while문, do-while문이 있다.

 

제어문 실행이 완료되면 조건문의 경우 다시 정상흐름으로 돌아가고, 반복문일 경우 제어문 처음으로 다시 되돌아가 반복 실행한다. 이것을 looping이라 한다.

 

if(조건식){
	for(조건식){	
		while(조건식){
        		switch(조건식){
			}
        	}
    	}
}

 

조건문 (if, switch)

if문

if문은 조건식의 결과에 따라 블록 실행 여부가 결정된다. 조건식에는 true 또는 false 값을 산출할 수 있는 연산식 또는 boolean 변수가 올 수 있다. 조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않는다.

 

중괄호 {}블록은 여러 개의 실행문을 하나로 묶기 위해 작성된다. 때문에 실행문이 하나 밖에 없다면 생략할 수 있다.

public class ControlExam {
    public static void main(String[] args){
        int james = 65;
        int joshua = 59;

        if(james>joshua){
            System.out.println("제임스는 조슈아보다 나이가 많습니다.");
        }

        if(james<joshua)
            System.out.println("조슈는 제임스보다 나이가 많습니다.");
        
    }
}

결과

 

if-else문

if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택한다. if문의 조건식이 true이면 if문 블록이 실행되고, 조건식이 false이면 else 블록이 실행된다.

 

public class ControlExam {
    public static void main(String[] args){
        int james = 65;
        int joshua = 59;

        if(james>joshua){
            System.out.println("제임스는 조슈아보다 나이가 많습니다.");
        }else{
            System.out.println("조슈는 제임스보다 나이가 많습니다.");
        }
    }
}

결과

else-if문

조건문이 여러 개인 if문도 있다. 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택할 수 있다.

if 블록의 끝에 else if문을 붙이면 된다. else if문의 수는 제한이 없고, else if 블록의 마지막에 else 블록을 추가할 수 있다.

 

 

 

public class ControlExam {
    public static void main(String[] args){
        int james = 65;
        int joshua = 59;

        if(james>joshua){
            System.out.println("제임스는 조슈아보다 나이가 많습니다.");
        }else if(james==joshua){
            System.out.println("제임스는 조슈아와 동갑입니다.");
        }else{
            System.out.println("조슈는 제임스보다 나이가 많습니다.");
        }
    }
}

결과

 

주의! if문을 여러 개 작성하는 것보다 if, else if를 사용하는 것이 더 효율적이다. 

 

switch문

switch문은 if문과 마찬가지로 조건(선택) 제어문이다. 하지만 switch문은 if문처럼 조건식이 true일 경우에 블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.

 

 

 

실행로직: switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행시킨다. 만약 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. default는 생략 가능하다.  case 끝에 break가 붙이면 다음 case를 실행하지 않고 switch문을 빠져나간다.

 

주의! break가 없으면 다음 case가 연달아 실행된다.

 

public class ControlExam {
    public static void main(String[] args){
        int james = 65;

        switch (james){
            case 64:
                System.out.println("제임스는 64세입니다.");
                break;
            case 65:
                System.out.println("제임스는 65세입니다.");
                break;
            case 66:
                System.out.println("제임스는 66세입니다.");
                break;
            default:
                System.out.println("제임스의 나이가 조건에 없습니다.");
        }
    }
}

 

자바 6까지는 switch문의 괄호에 정수 타입(byte, char, short, int, long) 변수와 정수값을 산출하는 연산식만 올 수 있었다.

자바 7부터는 String 타입의 변수도 올 수 있다.

 

public class ControlExam {
    public static void main(String[] args){
        String james = "James Arthur Gosling";

        switch (james){
            case "James Arthur Gosling":
                System.out.println("제임스의 풀네임은 James Arthur Gosling입니다.");
                break;
            case "James":
                System.out.println("제임스의 풀네임은 James입니.");
                break;
            case "James Arthur":
                System.out.println("제임스의 풀네임은 James Arthur 입니다.");
                break;
            default:
                System.out.println("제임스의 풀네임이 조건에 없습니다.");
        }
    }
}

 

 

장점:

1. 일반적으로 switch문이 if문 보다 속도가 빠르다. 이유 https://scshim.tistory.com/452

2. if문은 조건식의 결과가 true, false 두 가지 뿐이라 경우의 수가 많아질수록 else-if를 반복적으로 추가해야 하므로 코드가 복잡해질 수 있다. 이때, switch문은 변수의 값에 따라서 실행문이 결정되므로 코드를 간결하게 만들 수 있다.

 

단점: switch문은 if문과 다르게 범위를 표시할 수 없다.

 

Java 13. switch 연산자

자바 12버전 이전

switch문을 통해 값을 반환할 수 없고, multiple case를 지원하지 않아 switch 문이 길고 지저분했다.

 

// Traditional switch
private static int getValueBefore12(String mode) {
    int result;
    switch (mode) {
        case "a":
        case "b":
            result = 1;
            break;
        case "c":
            result = 2;
            break;
        case "d":
        case "e":
        case "f":
            result = 3;
            break;
        default:
            result = -1;
    }
    ;
    return result;
}

 

자바 12버전 이후

1.  결과 값을 화살표 연산자(->)로 반환할 수 있고,

2. multiple case를 지원하는 switch 연산자가 추가되었다. 

 

private static int getValueViaArrow(String mode) {
    int result = switch (mode) {
        case "a", "b" -> 1;
        case "c" -> 2;
        case "d", "e", "f" -> 3;
        default -> -1;
    };
    return result;
}

 

자바 13버전 이후

 값을 반환할 때 switch 연산자의 반환을 위해 yield 예약어를 사용할 수 있다.

 

private static int getValueViaYield(String mode) {
    int result = switch (mode) {
        case "a", "b":
            yield 1;
        case "c":
            yield 2;
        case "d", "e", "f":
            // do something here...
            System.out.println("Supports multi line block!");
            yield 3;
        default:
            yield -1;
    };
    return result;
}

 

반복문(for문, while문, do-while문)

반복문은 어떤 작업(코드들)이 반복적으로 실행되도록 할 때 사용됩니다. 반복문의 종류는 for문, while문, do-while문이 있습니다.

 

자세한 내용은 아래글에 이어서 작성합니다.

scshim.tistory.com/196

 

 

출처: 이것이 자바다

https://velog.io/@nunddu/Java-Switch-Expression-in-Java-14

mkyong.com/java/java-13-switch-expressions/

https://blogs.oracle.com/javamagazine/new-switch-expressions-in-java-12

반응형

댓글