Programming/Java

Java 조건문 - if문과 switch문의 핵심

Jan92 2021. 12. 6. 01:02

'if문과 switch문의 핵심'

 

if문

조건식과 문장을 포함하는 블럭'{ }'으로 구성되어 있습니다. 조건식의 연산 결과에 따라서 실행할 문장이 달라지기 때문에 프로그램의 실행 흐름을 변경할 수 있습니다.

 

-1

블럭 내의 문장이 하나뿐일 경우 괄호 '{ }'를 생략할 수 있지만 생략하지 않고 쓰는 것이 좋습니다. 이유는 나중에 새로운 문장들이 추가되면 다시 '{ }' 괄호로 문장들을 감싸줘야 하는데, 이때 괄호를 추가하는 것을 잊어버리기 쉽기 때문입니다.

 

 

if - else 문

-2

위 이미지의 왼쪽의 코드와 같이 상반된 관계에 있는 조건식을 'if - else' 문으로 바꿨을 때의 장점은 '하나의 조건식만 계산하면 된다'는 것입니다.

 

 

-3

'if - else if - else' 문에서 마지막 'else' 블럭은 생략할 수 있으며 'else' 블럭이 생략되었을 때는 'if - else if' 문의 어떤 블럭도 수행되지 않을 수 있습니다.

 

 

 

switch문

처리할 경우의 수가 많은 경우 if문 보다 switch문을 사용하는 것이 더 좋습니다. 단 switch문의 경우 아래와 같은 제약조건이 있어서 경우의 수가 많아도 어쩔 수 없이 if문을 사용해야 하는 경우가 있습니다.

 

public static void main(String[] args) {
    int num, result;
    final int ONE = 1;
    
    switch (result) {
        case '1':               // 가능. 문자 리터럴 (정수 상수 49와 동일)
        case ONE:               // 가능. 정수 상수
        case "YES":             // 가능. 문자열 리터럴 JDK 1.7부터 허용
        case num:               // 에러. 변수는 불가
        case 1.0:               // 에러. 실수도 불가
   
    ....
}

 

-1

switch문의 제약조건은 조건식의 결과값이 반드시 정수이어야 하며, 이 값과 일치하는 case문으로 이동하기 때문에 case문의 값 역시 정수이어야 합니다. 또한 같은 값의 case문이 여러개이면 어디로 이동해야 할지 알 수 없기 때문에 값이 중복되지 않아야 합니다.

변수나 실수, 문자열은 case문의 값으로 사용할 수 없고 case문의 값은 반드시 상수이어야 합니다.

 

 

-2

switch문에서 'break문'은 각 'case문'의 영역을 구분하는 역할을 하는데, 'break문'을 만나면 전제 switch문을 빠져나가게 됩니다.

만일 break문을 생략한다면 case문 사이의 구분이 없어지기 때문에 다른 break문을 만나거나 switch문 블럭{ }의 끝을 만날 때까지 나오는 모든 문장들을 수행하게 됩니다.

그렇기 때문에 'break문'을 빼먹지 않도록 주의해야 합니다.

 

switch (level) {
    case 3:
        grantDelete();    // 삭제 권한을 부여합니다.
    case 2:
        grantWrite();     // 쓰기 권한을 부여합니다.
    case 1:
        grantRead();      // 읽기 권한을 부여합니다.
}

하지만 위 코드처럼 고의적으로 'break문'을 생략하는 경우도 있습니다.

 

 

 

 

< 참고자료 >

남궁 성 저자의 'Java의 정석' 도서를 참고하여 정리한 내용입니다.