[myLV.net 집필진 강좌 – Goodmaner]
디자인패턴(1)에서는 다양한 디자인패턴 구조들에는 어떤 것이 있는지 살펴보았고, 이 중에서 보편적으로 가장 많이 사용하는 디자인패턴인 "생산자/소비자 이벤트 디자인패턴"에 대해서 알아보았습니다. 이번 강좌에서는 "표준 상태 머신 디자인 패턴"에 대해서 살펴보도록 하겠습니다. 앞서 언급한 "생산자/소비자 이벤트 디자인패턴"을 구현할 때 기능을 수행하는 소비자 루프를 구성할 때 "표준 상태 머신 디자인 패턴"을 사용할 수 있습니다. 뿐만 아니라 사용자 인터페이스가 간단한 프로그램을 구현할 때도 사용하면 매우 편리합니다. "표준 상태 머신 디자인 패턴"은 사전에 정의해 놓은 상태들 간에 천이과정을 통하여 프로그램이 실행되도록 하는 디자인 패턴입니다. 예를 들어서 상태를 A,B,C로 정의해 놓고, 실행을 A>>B>>C 순으로 실행되도록 운영할 수 있습니다. 이 디자인 패턴을 사용하는 경우 프로그램에 대한 유지보수 및 확장성이 뛰어납니다. 예를 들어서 기존에 구현한 내용 중에서 일부 기능을 수행하지 않도록 한다거나, 새로운 기능을 추가하려고 하는 경우 간단한 프로그램 수정을 통하여 구현 가능합니다. LabVIEW를 어느 정도 사용할 줄 아는 분들의 경우에는 이미 알고 있는 내용이겠지만, LabVIEW를 시작한지 얼마되지 않았거나, 체계적으로 배우지 못한 분들을 고려하여 아래와 같은 상태머신 구조에 대해서 함께 LabVIEW로 구현해보도록 하겠습니다.
지금부터는 LabVIEW를 이용하여 위의 상태머신을 구현해 보겠습니다.
위의 그림에서처럼 LabVIEW를 실행한 상태에서 "파일">>"새로 만들기"를 클릭합니다.
왼쪽 트리구조에서 "표준 상태 머신"을 선택하고 확인 버튼을 클릭합니다.
확인 버튼을 클릭하면 위 그림에서처럼 "표준 상태 머신"에 대한 기본 Template 코드가 자동으로 생성됩니다. 이 상태에서 "저장" 버튼을 클릭하면, 상태머신 구조에 대한 컨트롤을 저장할 수 있습니다. "StateMachineStates.ctl"이라는 파일로 저장하겠습니다.
"대기" 상태에서는 사용자 이벤트가 발생하는지를 체크해서 발생한 이벤트에 해당하는 상태로 천이하도록 해줍니다. 아래 그림에서처럼 클러스터 형태로 정의한 컨트롤에 대해서 값이 변경되면 그에 해당하는 다음 상태로 천이합니다. 클러스터에 대해서 "클러스터를 배열로" 함수와 "1D 배열 검색" 함수를 이용하여 각각의 버튼("프로세스 1", "프로세스 2", "프로세스 3", "종료")에 이벤트가 발생하는지 여부를 확인하도록 하였습니다. "대기" 상태는 -1, "프로세스 1" 상태는 0, "프로세스 2" 상태는 1, "프로세스 3" 상태는 2, "종료" 상태는 3입니다.
"A" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "A"라는 문자를 출력하게 합니다. 이후에는 조건에 따라서 다음에 천이할 상태를 결정합니다. "프로세스 1" 또는 "프로세스 2" 버튼을 클릭한 경우에는 "B" 상태로 천이하고, "프로세스 3" 버튼을 클릭한 경우에는 "대기" 상태로 천이합니다.
"B" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "B"라는 문자를 출력하게 합니다. 이후에는 조건에 따라서 다음에 천이할 상태를 결정합니다. "프로세스 1" 버튼을 클릭한 경우에는 "C" 상태로 천이하고 "프로세스 2" 버튼을 클릭한 경우에는 "대기" 상태로 천이합니다.
"C" 상태에서는 "단일 버튼 대화 상자" 함수를 이용하여 "C"라는 문자를 출력하게 합니다. 이후에는 변수들을 초기화시킨 후 "대기" 상태로 천이합니다.
"종료" 상태에서는 While 루프를 빠져나가도록 해서 프로그램을 종료시킵니다.
이처럼 "표준 상태 머신 디자인 패턴"을 이용하여 사용자 인터페이스가 간단한 프로그램을 손쉽게 구현할 수 있습니다. 서두에 프로그램의 유지 보수 및 확장성이 용이하다고 말씀드렸습니다. 예를 들어서 "프로세스 1" 버튼을 클릭하더라도 이와 관련한 상태들로 천이하게 안하고 싶으면, 아래 그림에서와 같이 간단하게 "프로세스 1"에 해당하는 케이스 구조 내용만 수정하면 됩니다. 뿐만 아니라 새로운 기능을 추가하고 싶으면, 새로운 기능에 해당하는 상태를 추가한 후 추가된 상태에 원하는 기능을 코드로 구현하면 됩니다.
LabVIEW에서 가장 많이 사용하는 디자인 패턴이기 때문에 반드시 숙지하시길 바랍니다. 첨부파일에 관련 예제 코드를 올려 드립니다.