IDL/Programming

CASE 구문과 SWITCH 구문

이상우_IDL 2025. 5. 20. 18:06
728x90

IDL에서 지원되는 구문들(Statements) 중에는 여러가지 경우들 중 조건에 부합되는 하나의 경우에 대하여 지정된 작업이 실행되도록 해주는 CASE 구문 및 SWITCH 구문이 있습니다. 그런데 CASE와 SWITCH는 얼핏 보면 비슷해 보일 수도 있지만 세부적인 기능은 서로 다릅니다. 오늘은 이 두가지 구문들 각각에 대한 개요 및 서로간의 차이점을 살펴보기로 하겠습니다.

 

 

< CASE 구문 >

 

CASE 구문은 여러가지 경우들 중 조건에 부합되는 하나의 경우에 대하여 지정된 작업을 실행하도록 하는 구문입니다. CASE 구문은 기본적으로 CASE로 시작하여 ENDCASE로 끝나는 구조를 갖습니다. 간단한 예제를 보면 다음과 같습니다.

 

x = 2
CASE x OF
   1 : PRINT, 'one'
   2 : PRINT, 'two'
   3 : PRINT, 'three'
   4 : PRINT, 'four'
ENDCASE

 

여기서 CASE 구문의 내용을 보면 변수 x의 값에 따른 4개의 경우들에 대한 각각의 작업이 정의되어 있습니다. 그리고 맨 앞에서 변수 x의 값이 2로 정의되었으므로 그 경우에 해당되는 내용이 실행됩니다. 따라서 위의 내용을 실행하면 다음과 같이 two라는 문구가 출력될 것입니다.

 

two

 

그런데 변수 x의 값이 CASE 구문에서 명시된 어떤 경우에도 부합되지 않을 수도 있습니다. 예를 들어 x의 값을 7로 정의하고 위의 내용을 다시 실행해봅시다.

 

x = 7
CASE x OF
   1 : PRINT, 'one'
   2 : PRINT, 'two'
   3 : PRINT, 'three'
   4 : PRINT, 'four'
ENDCASE

 

그러면 에러가 발생하면서 "Case statement found no matches"라는 문구가 출력되고 프로그램이 중단될 것입니다. 이와 같이 예외적인 경우가 발생할 경우에 대비하기 위해서는 ELSE를 추가로 사용하는 것이 필요합니다. 이러한 방식으로 위의 내용을 다음과 같이 변경해봅시다.

 

x = 7
CASE x OF
  1 : PRINT, 'one'
  2 : PRINT, 'two'
  3 : PRINT, 'three'
  4 : PRINT, 'four'
  ELSE : PRINT, 'no such case'
ENDCASE

 

이러한 내용을 실행하면 x가 7인 경우는 예외적인 경우이기 때문에 다음과 같이 ELSE에 명시된 작업이 실행되면서 해당 문구가 출력될 것입니다.

 

no such case

 

그리고 특정한 경우에 대하여 실행할 내용이 한 줄이 아닌 여러 줄이 될 경우에는 BEGIN~END를 사용하여 블록의 형태로 명시해주면 됩니다.

 

x = 2
CASE x OF
  1 : PRINT, 'one'
  2 : BEGIN
    PRINT, 'your choice is'
    PRINT, 'two'
  END
  3 : PRINT, 'three'
  4 : PRINT, 'four'
  ELSE : PRINT, 'no such case'
ENDCASE

 

즉 이러한 내용을 실행하면 다음과 같은 내용이 출력될 것입니다.

 

your choice is

two

 

 

< SWITCH 구문 >

 

SWITCH 구문은 그 구조를 보면 CASE 구문과 유사합니다. 그리고 여러가지 경우들 중 조건에 부합되는 하나의 경우에 대하여 지정된 작업을 실행한다는 점은 동일합니다. 하지만 CASE 구문과는 다른 결정적 차이가 있습니다. 즉 해당되는 경우에 대하여 지정된 작업을 수행한 다음에는 그 밑에 명시된 나머지 경우들에 대한 작업들도 마저 이어서 다 수행한다는 것입니다. 이해를 돕기 위하여 다음과 같은 예제를 살펴봅시다.

 

x = 2
SWITCH x OF
  1 : PRINT, 'one'
  2 : PRINT, 'two'
  3 : PRINT, 'three'
  4 : PRINT, 'four'
ENDSWITCH

 

일단 SWITCH 구문은 이와 같이 SWITCH로 시작하여 ENDSWITCH로 끝나는 구조를 갖습니다. 그런데 위의 내용을 실행해보면 출력되는 결과는 다음과 같습니다.

 

two
three
four

 

이러한 결과를 보면 SWITCH 구문이 CASE 구문과 어떻게 다른가를 알 수 있습니다. 즉 해당되는 경우에 대하여 지정된 작업은 일단 수행을 하고, 그 밑으로 명시된 나머지 경우들에 대하여 지정된 작업들도 모조리 다 수행한다는 것입니다. 그리고 결정적 차이점이 또 하나 있습니다. 위의 내용에서 변수 x의 값을 7로 변경하고 다시 실행해봅시다.

 

x = 7
SWITCH x OF
  1 : PRINT, 'one'
  2 : PRINT, 'two'
  3 : PRINT, 'three'
  4 : PRINT, 'four'
ENDSWITCH

 

여기서는 SWITCH 구문 내에 x가 7인 경우는 명시되어 있지 않습니다. 즉 예외적인 경우입니다. 그런데 이러한 내용을 실행해보면 그냥 아무것도 출력되지 않고 끝납니다. 즉 예외적인 경우에 대해서 에러가 발생하지 않는다는 것을 유념해야 합니다. 앞서 CASE 구문의 경우 이러한 상황에서 에러가 발생했던 것과는 분명히 차이가 있습니다. 물론 SWITCH 구문에서도 ELSE를 사용할 수 있습니다.

 

x = 7
SWITCH x OF
  1 : PRINT, 'one'
  2 : PRINT, 'two'
  3 : PRINT, 'three'
  4 : PRINT, 'four'
  ELSE : PRINT, 'no such case'
ENDSWITCH

 

이와 같은 내용을 실행하면 ELSE에 해당되는 작업이 실행될 것입니다.

 

no such case

 

어쨌든 SWITCH 구문의 작동 방식은 CASE 구문과는 분명히 다릅니다. 물론 SWITCH 구문도 마치 CASE 구문처럼 해당되는 경우에 대한 작업만 실행하고 그 뒷부분은 무시하도록 작성하는 것도 가능은 합니다. 다만 그렇게 하려면 각각의 경우에 대하여 BREAK 명령을 추가로 사용해줘야 합니다. 즉 SWITCH 구문의 내용 자체를 다음과 같이 작성하는 것입니다.

 

x = 2
SWITCH x OF
  1 : BEGIN
    PRINT, 'one'
    BREAK
  END
  2 : BEGIN
    PRINT, 'two'
    BREAK
  END
  3 : BEGIN
    PRINT, 'three'
    BREAK
  END
  4 : BEGIN
    PRINT, 'four'
    BREAK
  END
ENDSWITCH

 

이 내용을 보면 각각의 경우마다 PRINT 명령에 의한 출력 이후에 BREAK 명령이 사용되었습니다. 여기서 BREAK 명령의 역할은 SWITCH 구문 내 블록으로부터 탈출하는 것입니다. 따라서 해당되는 경우 이후의 내용은 실행하지 않고 바로 빠져나오게 됩니다. BREAK 명령에 관해서는 예전에 관련 게시물을 올린 바 있으므로 이 내용도 함께 참조하시면 됩니다. 다만 SWITCH 구문을 굳이 이렇게까지 복잡하게 작성할 바에는 그냥 CASE 구문을 사용하는게 더 나을 것 같다는 생각은 듭니다. 아무래도 SWITCH 구문은 그 자체의 기본적인 특성을 그대로 살리는 방향으로 사용하는 것이 더 좋을 것 같습니다.

 

오늘은 이와 같이 CASE 구문 및 SWITCH 구문 각각의 특성 및 서로간의 중요한 차이점 등에 관하여 살펴보았습니다. 유저들께서는 작업의 특성에 따라서 CASE 구문 또는 SWITCH 구문 중 더 적절한 것을 선택하여 사용하시면 될 것 같습니다.

 

 

이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.

LIST