'if문과 switch문의 핵심'
if문
조건식과 문장을 포함하는 블럭'{ }'으로 구성되어 있습니다. 조건식의 연산 결과에 따라서 실행할 문장이 달라지기 때문에 프로그램의 실행 흐름을 변경할 수 있습니다.
-1
블럭 내의 문장이 하나뿐일 경우 괄호 '{ }'를 생략할 수 있지만 생략하지 않고 쓰는 것이 좋습니다. 이유는 나중에 새로운 문장들이 추가되면 다시 '{ }' 괄호로 문장들을 감싸줘야 하는데, 이때 괄호를 추가하는 것을 잊어버리기 쉽기 때문입니다.
-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의 정석' 도서를 참고하여 정리한 내용입니다.
'Programming > Java' 카테고리의 다른 글
자바 Java 상속, 부모 클래스와 자식 클래스(extends, super) (0) | 2021.12.11 |
---|---|
Java Optional Class 기본적인 이해 (0) | 2021.12.06 |
Java 삼항식, 삼항연산자(Conditional Operator) 사용하는 방법 (0) | 2021.12.02 |
상수와 리터럴 (constant & literal) 정리 (0) | 2021.10.27 |
날짜와 시간을 다루는 LocalDate, LocalTime, LocalDateTime (java.time 패키지) 기본 개념 (0) | 2021.10.19 |