자바 조건문 switch문에 대해 알아보자
2025. 1. 2. 13:00ㆍJAVA
728x90
반응형
안녕하세요. 진득코딩입니다.
지난 시간에 알아본 if문은 경우의 수가 많아질수록 else-if를 계속 추가해야 하므로 조건식이 많아져서 복잡해지고, 여러 개의 조건식을 계산해야 하므로 처리 시간도 많이 걸립니다.
이러한 it문과 달리 switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하므로 알아보기 쉽습니다.
이번 시간에는 또다른 조건문인 switch문에 대해 알아보도록 하겠습니다.
switch문
- switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동합니다.
- 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 됩니다.
- switch문은 표현이 간결하여 알아보기 쉽지만 제약 조건이 있기 때문에, 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야 하는 경우도 있습니다.
** switch문 수행 순서
1. 조건식을 계산합니다.
2. 조건식의 결과와 일치하는 case문으로 이동합니다.
3. 이후의 문장들을 수행합니다.
4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나갑니다.
- 만일 조건식의 결과와 일치하는 case문이 하나도 없는 경우에는 default문으로 이동합니다.
- default문은 if문의 else블럭과 같은 역할을 한다고 보면 이해하기 쉽습니다.
- default문의 위치는 어디라도 상관없으나 보통 마지막에 놓기 때문에 break문을 쓰지 않아도 됩니다.
- switch문에서 break문은 각 case문의 영역을 구분하는 역할을 하는데, 만일 break문을 생략하면 case문 사이의 구분이 없어져 다른 break문을 만나거나 switch문 블럭{}의 끝을 만날 때까지 나오는 모든 문장을 수행해야 합니다.
- 때문에 각 case문의 마지막에 break문을 빼먹는 실수를 하지 않도록 주의해야 합니다.
switch문의 제약조건
- switch문의 조건식은 결과값이 반드시 정수이어야 하며, case문의 값 역시 정수이어야 합니다.
- 또한 case문은 중복되지 않아야 합니다.
- 그리고 case문의 값은 반드시 상수이어야 하며, 변수나 실수, 문자열은 case문의 값으로 사용할 수 없습니다.
** switch문의 제약조건
1. switch문의 조건식 결과는 정수 또는 문자열 이어야 합니다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 합니다.
- 현재 몇 월인지 입력받아서 해당하는 계절을 출력하는 예제입니다.
- case문은 한 줄에 하나씩 쓰던, 한 줄에 붙여서 쓰던 상관없습니다.
- 위 예제는 컴퓨터와 사용자가 가위바위보를 하는 간단한 게임입니다.
- 사용자로부터 1(가위), 2(바위), 3(보) 중의 하나를 입력받고, 컴퓨터는 1, 2, 3 중에서 하나를 임의로 선택합니다.
- 난수(임의의 수)를 얻기 위해 Math.random()을 사용했습니다.
- Math.random() 메서드는 0.0과 같거나 크고 1.0보다 작은 하나의 double값을 반환합니다.
** Math.random() 메서드를 이용하여 1과 3사이의 정수를 구하는 방법
1. 각 변에 3을 곱합니다.
2. 각 변을 int형으로 변환합니다.
3. 각 변에 1을 더합니다.
- 주사위를 던졌을 때 나타나는 임의의 값을 얻기 위해서는 3 대신 6을 곱하면 됩니다.
com | 가위(1) | 바위(2) | 보(3) |
user | |||
가위(1) | 무승부 | 컴승 | 유저승 |
바위(2) | 유저승 | 무승부 | 컴승 |
보(3) | 컴승 | 유저승 | 무승부 |
- 위 표에서 보면 user에서 com의 값을 빼면, 무승부는 0, 컴퓨터 승리는 -1과 2, 사용자의 승리는 1, -2인 것을 알 수 있습니다.
com | 가위(1) | 바위(2) | 보(3) |
user | |||
가위(1) | 0 | -1 | -2 |
바위(2) | 1 | 0 | -1 |
보(3) | 2 | 1 | 0 |
- 해당 값들은 모두 정수이므로 switch문으로 처리가 가능합니다.
- 위 예제는 주민등록번호를 입력받아서 성별을 확인해서 출력하는 예제입니다.
- 주민등록번호 뒷 번호의 첫 번째 자리의 값은 성별을 의미하는데, 그 값이 1, 3이면 남자, 2, 4이면 여자를 의미합니다.
- 입력받은 주민등록번호는 char배열 regNo에 저장되며, 이 배열에서 성별을 의미하는 값은 8번째에 저장되어 있습니다.
- 문자열에 저장된 문자는 '문자열.charAt(index)'로 가져올 수 있습니다.
- 이때 index는 연속된 정수값으로 1이 아닌 0부터 시작합니다.
- 그래서 8번째 문자는 regNo.charAt(7)을 사용해야 합니다.
- char타입의 값은 정수(유니코드)로 저장되기 때문에 이처럼 char타입의 값도 switch문의 조건식과 case문에 사용할 수 있습니다.
- switch문은 조건식을 1번만 계산하면 되므로 더 빠릅니다.
- 하지만 case문이 너무 많아져서 좋지 않은 코드가 되었습니다.
- 반드시 속도를 더 향상시켜야 한다면 복잡하더라도 위와 같이 코드를 작성하지만, 그렇지 않다면 if문을 사용하는 것이 더 좋습니다.
- int와 double을 활용하여 4-9 예제보다 간결하게 작성한 예제입니다.
- score를 10으로 나누면, 전에 배운 것과 같이 'int / int'의 결과는 int이기 때문에 소수점은 버린 수를 얻습니다.
- 따라서 80과 89 사이의 숫자들은 10으로 나누면 결과가 8이 됩니다.
- 마찬가지로 70과 79 사이의 숫자들은 10으로 나누면 7이 되는데 이를 이용하면 됩니다.
- 이처럼 switch문에서는 조건식을 잘 만들어서 case문의 갯수를 줄이는 것이 중요합니다.
switch문의 중첩
- switch문도 if문처럼 중첩이 가능합니다.
- 이때 break문을 빼먹지 않도록 주의해야 합니다.
- 위와 같이 중첩된 switch문을 사용하여 예제 4-8보다 디테일한 문장들을 구사할 수 있게 되었습니다.
이번 시간에는 switch문을 살펴보면서 if문과의 차이를 살펴보았습니다.
처리 시간과 가독성이 중요하다면 switch문, case문을 너무 많이 작성해야 할 때는 if문을 사용하는 것이 좋습니다.
이렇게 두 조건식에 대해 숙지하여 사용하면서 어떤 상황에서 어떤 조건식이 어울릴지 판단하는 것도 좋은 프로그래머의 자질이라고 생각합니다.
이번 포스팅은 여기까지입니다.
궁금하시거나 문의하실 사항은 댓글에 남겨주시면 감사하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'JAVA' 카테고리의 다른 글
자바 반복문 while문에 대해 알아보자 (0) | 2025.01.06 |
---|---|
자바 반복문 for문에 대해 알아보자 (0) | 2025.01.03 |
자바 제어문인 조건문 if문에 대해 알아보자 (0) | 2025.01.01 |
비트 연산자와 그 외 여러 연산자들에 대해 알아보자 (0) | 2024.12.31 |
자바 비교 연산자와 논리 연산자에 대해 알아보자 (0) | 2024.12.30 |