프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

31. 조건문 (하)


if, else if, else까지 배워놓고, 또 어떤 조건문이 있길래 하편을 준비했는지 걱정되시죠?

걱정마세요. 이번에 배울 것은 기존의 조건문 개념 및 역할과 동일하지만, 사용법이 다른 또다른 조건문을 준비했습니다. 더욱 간단하고 깔끔한 코드를 위해서죠. 그래서 어렵지는 않을 것입니다.

switch

switch는 가장 발전된 형태의 조건문 중 하나일 것입니다. 여러개의 else ifelse로 묶인 큰 조건문 묶음을 간결하게 쓸 수 있거든요.

1if (변수 = 값 1)
2{
3 ;변수가 '값 1'일 때 할 내용
4}
5else if (변수 = 값 2 )
6{
7 ;변수가 '값 2'일 때 할 내용
8}
9else if (변수 = 값 3 || 변수 = 값 4)
10{
11 ;변수가 '값 3' 또는 '값 4'일 때 할 내용
12}
13else
14{
15 ;모든 경우에 해당하지 않을 때 할 내용
16}
복잡한 if - else if - else 조건문

위와 같은 조건문의 단점은 눈에 잘 안 들어온다는 것입니다. 따라서, 이렇게 값을 등호(=)로 비교하는 조건문을 연달아서 쓴다면 아래와 같이 switch로 대체하는게 좋습니다.

1switch 변수
2{
3 case 값 1:
4 ;변수가 '값 1'일 때 할 내용
5 case 값 2:
6 ;변수가 '값 2'일 때 할 내용
7 case 값 3, 값 4:
8 ;변수가 '값 3' 또는 '값 4'일 때 할 내용
9 default:
10 ;모든 경우에 해당하지 않을 때 할 내용
11}
switch 문의 기본 구조

이 코드 조각은 본질적으로 위의 if - else if - else 조건문과 같습니다. 눈에 더 잘 들어오지 않나요?

switch를 사용할 때 알아야 할 점은 아래와 같습니다.

  • 변수가 여러 값 중 하나와 일치하면 된다면, 그 값들을 콤마로 구분하여 작성합니다. (위 코드 조각의 7번 줄)
  • case엔 블록 처리를 해주지 않습니다.
  • default는 기존에 배웠던 else와 마찬가지로, 필요 없다면 쓰지 않아도 됩니다.

switch를 쓰는 이유

"그냥 if - else if - else로 사용해도 되잖아요?"

타당한 의문입니다. switch 문을 몰라도 조건문을 구성하는데 아무런 지장이 없습니다. 그러나 switch 문을 사용하면 좋은 경우가 꽤 있습니다. 대표적으로 else if가 많은 경우입니다.

조건이 많고 각 조건마다 다른 동작을 해야 하는 경우 else if를 죽 늘여서 사용하게 됩니다. 자연스럽게 하나의 수준에서 블록이 많이 사용됩니다.

1if (비교할 변수 = 경우 1)
2{
3}
4else if (비교할 변수 = 경우 2)
5{
6}
7else if (비교할 변수 = 경우 3)
8{
9}
10else if (비교할 변수 = 경우 4)
11{
12}
13else if (비교할 변수 = 경우 5)
14{
15}
16...

이련 경우, 같은 수준의 블록이 많기 때문에 조건문 묶음의 범위를 파악하기 힘들어집니다. 해당 변수의 값을 비교하는 구문이 어디까지 이어져있는지 헷갈리기 마련입니다.

반면 switch를 사용하면 전체가 하나의 블록으로 감싸지기 때문에 그 범위를 파악하기 용이해집니다.

1switch 비교할 변수
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라는 문자열이 들어있으면 주소를 출력하는 예제를 만들어보겠습니다.

1var := "addr"
2switch var
3{
4 case "name":
5 MsgBox("이름은 홍길동입니다.")
6 case "address", "addr":
7 MsgBox("울릉도 동남쪽 뱃길따라 이백리")
8 MsgBox("외로운 섬하나 새들의 고향에 살고 있습니다.")
9}
예제 1. switch 문의 사용

눈여겨 볼 점이 몇 개 있습니다.

  • 늘 그래왔던대로, 문자열인 name, address, addr는 따옴표로 처리해주었습니다.
  • varaddressaddr 중 하나라도 일치하면 되는 조건이므로, 콤마로 구분하여 작성해주었습니다.
  • 두번째 case에서 볼 수 있듯 여러 줄의 구문을 실행시킬 때 블록 처리를 해주지 않았습니다.
  • default는 사용하지 않았습니다. 기존에 배웠던 else와 마찬가지로, 필요 없다면 쓰지 않아도 됩니다.

즉, 기존 사용하던 if - else if - else 문에서 조건이 변수가 어떤 값일 경우를 단순히 작성할 수 있는 장점이 있습니다. 비교 연산자로 =를 사용하는 경우면서 else if가 많은 경우 switch 문의 사용을 고려해야합니다.

다음 강은 쉬어가는 파트로서 반복문과 조건문과 관련된 여담을 준비했습니다.

질문하러 가기