일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Method
- hash table
- bit manipulation
- Data Structure
- 코딩테스트
- Stack
- database
- two pointers
- Number Theory
- Counting
- string
- 구현
- Binary Search
- dynamic programming
- sorting
- 파이썬
- Binary Tree
- java
- Class
- 자바
- array
- geometry
- 코테
- implement
- SQL
- simulation
- Matrix
- Tree
- Math
- greedy
- Today
- Total
코린이의 소소한 공부노트
제어문 (1) 조건문 - switch 본문
조건문이란 조건을 만족할 때만 해당 블록을 실행시키는 제어문이다.
- 조건이 참일 경우 해당 블록 1번 실행
- 조건이 거짓일 경우 해당 블록 실행 안 함
switch문의 기본 생김새는 이렇다.
switch (조건식){
case 값1:
// 조건식의 결과가 값1과 일치할 경우 수행
// ...
break; // switch문을 빠져 나온다.
case 값2:
// 조건식의 결과가 값2와 일치할 경우 수행
// ...
break; // switch문을 빠져 나온다.
// ...
default:
// 조건식의 결과와 일치하는 case가 없을 때 수행
// break;
}
1. switch
- 경우의 수가 많을 때 유용하게 쓰이는 조건문이다.
- 조건식을 계산해서 나온 결과와 일치하는 case를 찾아간다.
- 이때 조건식의 결과는 정수 또는 문자열 이어야 한다.
- break를 만날 때까지(또는 switch문이 끝날 때까지) 실행한다.
2. case
- switch의 조건식을 계산해서 나올 수 있는 각각의 경우를 나타낸다.
- case의 값은 정수 상수, 문자열만 가능하고, 중복되어서는 안 된다.
- case문에서 수행할 내용이 끝나면 break를 넣어줘 switch문을 빠져나오게 해야 한다.
- 때에 따라 break를 생략하는 경우도 있다.
예) 여러 case에서 같은 내용을 수행할 경우 case문을 여러 개 쓰고 수행할 내용을 한 번만 쓰면 된다.
3. default
- 조건식의 결과가 case에 없을 때 수행한다.
- default는 if문의 else처럼 생략 가능하다.
- 보통 default는 가장 마지막에 쓰기 때문에 break를 생략하기도 한다.
백문이 불여일견, 설명한 내용에 대한 예시를 들어보겠다. 예시를 위한 코드라 리팩터링 된 것은 아니다.
// month: 월을 나타내는 int 변수
switch(month) {
// 1)
case 3:
System.out.println("봄입니다.");
break;
case 4:
System.out.println("봄입니다.");
break;
case 5:
System.out.println("봄입니다.");
break;
// 2)
case 6: case 7: case 8:
System.out.println("여름입니다.");
break;
case 9: case 10: case 11:
System.out.println("가을입니다.");
break;
case 12: case 1: case 2:
System.out.println("겨울입니다.");
break;
// 3)
default:
System.out.println("월을 잘못 입력하셨습니다.");
}
1) month=3이면 case 3에 해당하는 println()을 실행 후 break를 만나 switch문을 빠져나온다. case 4와 5도 마찬가지다.
2) 계절이 같을 때 수행하는 문장도 같으므로 위의 코드처럼 같은 문장을 수행하는 case끼리 이어서 쓸 수도 있다. 봄에 해당하는 case 3~5도 마찬가지다.
3) 1~12를 입력하지 않은 경우 default의 내용을 수행하게 된다. println() 실행 후 더 이상의 코드가 없기 때문에 switch문을 빠져나오게 된다. 그래서 break를 굳이 안 써도 된다는 것이었다.
4) 입력을 1~12까지만 한다고 하면, 마지막 부분을 바꿔 쓸 수 있다.
// month: 월을 나타내는 int 변수
switch(month) {
// 생략
case 9: case 10: case 11:
System.out.println("가을입니다.");
break;
default:
System.out.println("겨울입니다.");
}
이 코드를 if문으로 바꿔보면 다음과 같다.
// month: 월을 나타내는 int 변수
if (3 <= month < 6)
System.out.println("봄입니다.");
else if (6 <= month < 9)
System.out.println("여름입니다.");
else if (9 <= month < 12)
System.out.println("가을입니다.");
else
System.out.println("겨울입니다.");
만약 month=10이었다면 if문의 경우 조건식을 3번 계산해야 하지만 switch문은 조건식을 1번만 계산하면 된다. 그래서 처리해야 하는 경우의 수가 많을 때 if문보다는 switch문이 더 낫다.
이렇게 유용한 swith문은 if문으로 바꿔 쓸 수 있다. 하지만 모든 if문을 switch문으로 바꿀 수는 없다. switch문의 제약조건 때문이다.
1. 조건식의 결과는 정수 또는 문자열 이어야 한다.
- if의 조건식의 결과는 true 또는 false이다.
- 2가지 값으로 모든 경우를 표현하긴 힘들어서 switch문에서는 결과를 여러 개로 나눌 수 있는 타입을 선택했다.
- 그래서 선택한 것이 바로 정수와 문자열이다.
- 문자열의 경우 JDK 1.7부터 적용되었다.
2. case의 값은 정수 상수, 문자열만 가능하고, 중복되어서는 안 된다.
- 정수 상수가 된다는 말은 문자('A'=65)도 된다는 뜻이다.
- 상수만 된다는 말은 변수는 안 된다는 뜻이다.
- case의 값이 중복될 경우, 어떤 case문을 수행할지 결정할 수 없기 때문이다.
int x, y; // 정수 변수 x, y
final int MAX = 200; // 상수 MAX
// 중략...
switch (x){
case '0': // OK. 문자
case MAX: // OK. 정수 상수
case "Hi": // OK. 문자열
case y: // 에러. 변수
case 3.0: // 에러. 실수
// 생략...
}
조건문을 만들 때 if문으로 생각해본 후, switch의 제약조건에 위배되지 않으면 switch로 코딩하면 된다.
'Java' 카테고리의 다른 글
제어문 (2) 반복문 - while, do-while (0) | 2022.01.08 |
---|---|
제어문 (2) 반복문 - for (0) | 2022.01.07 |
제어문 (1) 조건문 - if, else if, else (0) | 2022.01.04 |
제어문과 블록, 특별한 키워드 (0) | 2022.01.03 |
조건 연산과 대입 연산 (0) | 2022.01.01 |