⚠ 이 강좌는 오토핫키 v2를 다룹니다
지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만,
새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.
31. 조건문 (하)
마지막 수정일: 2023-12-22
if
, else if
, else
까지 배워놓고, 또 어떤 조건문이 있길래 하편을 준비했는지 걱정되시죠?
걱정마세요. 이번에 배울 것은 기존의 조건문 개념 및 역할과 동일하지만, 사용법이 다른 또다른 조건문을 준비했습니다. 더욱 간단하고 깔끔한 코드를 위해서죠. 그래서 어렵지는 않을 것입니다.
switch
switch
는 가장 발전된 형태의 조건문 중 하나일 것입니다.
여러개의 else if
와 else
로 묶인 큰 조건문 묶음을 간결하게 쓸 수 있거든요.
1 if (변수 = 값 1)
2 {
3 ;변수가 '값 1'일 때 할 내용
4 }
5 else if (변수 = 값 2 )
6 {
7 ;변수가 '값 2'일 때 할 내용
8 }
9 else if (변수 = 값 3 || 변수 = 값 4)
10 {
11 ;변수가 '값 3' 또는 '값 4'일 때 할 내용
12 }
13 else
14 {
15 ;모든 경우에 해당하지 않을 때 할 내용
16 }
위와 같은 조건문의 단점은 눈에 잘 안 들어온다는 것입니다.
따라서, 이렇게 값을 등호(=
)로 비교하는 조건문을 연달아서 쓴다면 아래와 같이 switch
로 대체하는게 좋습니다.
1 switch 변수
2 {
3 case 값 1:
4 ;변수가 '값 1'일 때 할 내용
5 case 값 2:
6 ;변수가 '값 2'일 때 할 내용
7 case 값 3, 값 4:
8 ;변수가 '값 3' 또는 '값 4'일 때 할 내용
9 default:
10 ;모든 경우에 해당하지 않을 때 할 내용
11 }
이 코드 조각은 본질적으로 위의 if - else if - else 조건문과 같습니다. 눈에 더 잘 들어오지 않나요?
switch
를 사용할 때 알아야 할 점은 아래와 같습니다.
- 변수가 여러 값 중 하나와 일치하면 된다면, 그 값들을 콤마로 구분하여 작성합니다. (위 코드 조각의 7번 줄)
case
엔 블록 처리를 해주지 않습니다.default
는 기존에 배웠던else
와 마찬가지로, 필요 없다면 쓰지 않아도 됩니다.
switch를 쓰는 이유
"그냥 if - else if - else로 사용해도 되잖아요?"
타당한 의문입니다. switch 문을 몰라도 조건문을 구성하는데 아무런 지장이 없습니다. 그러나 switch 문을 사용하면 좋은 경우가 꽤 있습니다. 대표적으로 else if가 많은 경우입니다.
조건이 많고 각 조건마다 다른 동작을 해야 하는 경우 else if
를 죽 늘여서 사용하게 됩니다.
자연스럽게 하나의 수준에서 블록이 많이 사용됩니다.
1 if (비교할 변수 = 경우 1)
2 {
3 }
4 else if (비교할 변수 = 경우 2)
5 {
6 }
7 else if (비교할 변수 = 경우 3)
8 {
9 }
10 else if (비교할 변수 = 경우 4)
11 {
12 }
13 else if (비교할 변수 = 경우 5)
14 {
15 }
16 ...
이련 경우, 같은 수준의 블록이 많기 때문에 조건문 묶음의 범위를 파악하기 힘들어집니다. 해당 변수의 값을 비교하는 구문이 어디까지 이어져있는지 헷갈리기 마련입니다.
반면 switch
를 사용하면 전체가 하나의 블록으로 감싸지기 때문에 그 범위를 파악하기 용이해집니다.
1 switch 비교할 변수
2 {
3 case 경우 1:
4 ;변수가 '경우 1'일 때 할 내용
5 case 경우 2:
6 ;변수가 '경우 2'일 때 할 내용
7 case 경우 3:
8 ;변수가 '경우 3'일 때 할 내용
9 case 경우 4:
10 ;변수가 '경우 4'일 때 할 내용
11 }
switch 문 전체를 묶은 하나의 큰 블록이 보이시나요? 이와 같이, 전체가 한 블록으로 감싸져 조건문의 범위가 눈에 잘 띕니다. 보기 좋은 코드가 유지·보수 시 생산성이 높은 것은 당연합니다.
따라서 else if
가 많이 연결되면서 조건이 var = value
형식인 경우, switch 문의 사용을 적극 고려해보세요.
실습
만약 변수에 name
이라는 문자열이 들어있으면 이름을 출력하고, address
혹은 addr
라는 문자열이 들어있으면 주소를 출력하는 예제를 만들어보겠습니다.
1 var := "addr"
2 switch var
3 {
4 case "name":
5 MsgBox("이름은 홍길동입니다.")
6 case "address", "addr":
7 MsgBox("울릉도 동남쪽 뱃길따라 이백리")
8 MsgBox("외로운 섬하나 새들의 고향에 살고 있습니다.")
9 }
눈여겨 볼 점이 몇 개 있습니다.
- 늘 그래왔던대로, 문자열인
name
,address
,addr
는 따옴표로 처리해주었습니다. var
가address
와addr
중 하나라도 일치하면 되는 조건이므로, 콤마로 구분하여 작성해주었습니다.- 두번째
case
에서 볼 수 있듯 여러 줄의 구문을 실행시킬 때 블록 처리를 해주지 않았습니다. default
는 사용하지 않았습니다. 기존에 배웠던else
와 마찬가지로, 필요 없다면 쓰지 않아도 됩니다.
즉, 기존 사용하던 if - else if - else
문에서 조건이 변수가 어떤 값일 경우를 단순히 작성할 수 있는 장점이 있습니다.
비교 연산자로 =
를 사용하는 경우면서 else if
가 많은 경우 switch 문의 사용을 고려해야합니다.
다음 강은 쉬어가는 파트로서 반복문과 조건문과 관련된 여담을 준비했습니다.