프날 오토핫키 강좌  v2

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

지금 보시는 강좌는 널리 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
이전 오토핫키 버전과는 많은 부분에서 호환이 되지 않으니, 만약 현시점에서 대중적인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시길 바랍니다.

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 문의 사용을 고려해야합니다.

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