[Archive] 강좌게시판

취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

[myLV.net 집필진 강좌] Actor Framework Structure 메커니즘

 [myLV.net 집필진 강좌 – 웅킹킹킹]

 

안녕하세요. 웅킹킹킹 입니다.

 

드디어 Actor Framework에 대한 시간이 왔습니다.

 

지난 강좌에서 다룬 OOP(Object Oriented Programming)에 대한 공부를 반복과 실습을 통해 충분히 숙련이 되었기를 바라면서 Actor Framework 강좌를 시작하도록 하겠습니다.

 

  1. Actor Framework란?


    Actor Framework는 NI에서 제공하는 OOP으로 프로그래밍을 하기 위한 프로그래밍 구조를 말합니다. 많이 사용해보셨을 기존 프로그래밍 패턴인 상태 머신, 생산자 소비자 구조, 마스터 슬레이브 구조처럼 OOP베이스로 프로그래밍을 하는 프로그래밍 패턴, Structure(구조) 입니다.

    Actor Framework는 현재 NI에서 라이브러리로 제공하고 OOP(Object Oriented Programming)기반으로 구성되어 있습니다.


Actor Framework 라이브러리는 LabVIEW가 설치된 위치의 vi.lib\Actor Framework\Actor Framework.lvlib에 위치합니다.


통상적으로 기본 설정으로 LabVIEW를 설치하셨다면
C:\Program Files (x86)\National Instruments\LabVIEW2015\vi.lib\Actor Framework\Actor Framework.lvlib에 위치해 있습니다.

 

 

그림 1 Actor Framework 라이브러리그림 1 Actor Framework 라이브러리

 

Actor Framework 라이브러리는 그림 2와 같이 여러 개의 클래스로 구성되어 있는 데 가장 중요한 클래스로는 Actor클래스, Message클래스 입니다.
라이브러리에 존재하는 클래스는 모두 중요하기 때문에 Actor Framework의 클래스 구성을 알아보겠습니다.

 

 

그림 2 Actor Framework 클래스 계층구조그림 2 Actor Framework 클래스 계층구조

 

  1. Actor.lvclass A.png


    Actor Framework의 Actor입니다. 명칭에서 알 수 있듯이 가장 중요한 클래스입니다. Actor클래스는 User Interface(UI)를 가질 수 있으며 시스템에서 필요한 대부분의 기능을 Actor클래스에서 구현을 하게 됩니다.

    Actor클래스는 그림3과 같이 이전에 OOP Exercise에서 실습한 OOP상속 설정을 하는 것처럼 Actor Framework 라이브러리의 Actor클래스를 상속하여 만듭니다.
    Actor클래스를 상속한다는 뜻은 Actor클래스의 Data멤버, Method를 이용한다는 뜻과 동일합니다. OOP Exercise에서 상속에 대한 내용 꼭 숙지하시기 바랍니다.

 

그림 3 Actor 클래스 상속그림 3 Actor 클래스 상속

 

프로그래머는 구현한 Actor클래스에서 시스템에 필요한 Data멤버, Method를 작업하여 시스템 프로그램을 만들어 갑니다.

Actor Framework 라이브러리에 있는 Actor클래스의 Data멤버와 Method를 프로그래머가 구현한 Actor에서 모두 사용하게 됩니다.

라이브러리에 있는 Actor클래스의 모든 내용을 분석해야 되지만 가장 중요한 Method를 꼽자면 바로 그림 4의 Actor Core.vi 입니다.


 

그림 4 Actor클래스의 Actor Core.vi Method그림 4 Actor클래스의 Actor Core.vi Method

 

그림 5 Actor Core.vi 블록다이어그램그림 5 Actor Core.vi 블록다이어그램

 

그림 5의 Actor Core.vi 블록다이어그램의 구조가 눈에 익은 구조 모습입니다. 바로 생산자 소비자 디자인 패턴의 소비자 구조 입니다. 함수의 모양은 다르지만 1번 SubVI는 Dequeue(원소를 큐에서 제거)함수와 동일한 기능을 하는 함수입니다.

전체적인 Actor Framework의 메커니즘을 알아야 각 Actor의 소스 코드 분석이 의미가 있기 때문에 자세한 소스 코드 분석은 추후에 이루어 질 것입니다.

이처럼 Actor클래스의 핵심은 생산자 소비자 디자인 패턴처럼 Queue를 이용해서 메시지나 명령을 전달받아서 수행한다는 점입니다.

그럼 어떻게 메시지를 전달할까요? 이 부분은Message클래스가 맡아서 수행합니다.

 

 

2. Message.lvclass B.png

 

Actor클래스에서 수행해야 될 명령이나 메시지를 전달해주는 매개체 역할을 하는 Message클래스 입니다.


프로그래머는 자신이 구현한 Actor클래스의 Method를 원하는 시스템 타이밍 또는 시퀀스에서 실행이 되도록 하기 위해서 해당 Method의 Message클래스를 만들어야 합니다.


Message클래스를 구현하는 과정도 Actor클래스와 마찬가지로 Actor Framework 라이브러리의 Message클래스를 상속받아서 만들게 됩니다.

 

 

그림 6 Message 클래스의 Do.vi Method그림 6 Message 클래스의 Do.vi Method

 

Message클래스에서도 마찬가지로 가장 중요한 Method가 있습니다. 바로 Do.vi Method입니다.

그림 5의 Actor Core.vi의 블록다이어그램 중 2번 항목이 바로 Message클래스의 Do.vi 입니다.

결국 Actor클래스에서 Queue를 통해 전달받은 메시지나 명령을 통해 실행하는 함수는 Message클래스의Do.vi Method라는 것입니다.

그래서 프로그래머는 Message클래스를 통해 명령이나 메시지를 전달하는 매개체 역할도 하지만 Do.vi Method안에 원하는 기능을 구현하는 것이 됩니다.

이전 OOP 공부를 충실히 하셨다면 아시다시피 OOP이기 때문에 D.vi Method안에는 Actor가 실행할 수 있도록 Actor의 Method 중 하나가 호출(구현)되어 있어야 합니다.

그럼 메시지를 전달하는 매개체 역할은 어떻게 할까요?
Actor Framework 구조를 구성하기 위해 Actor Framework 라이브러리에 필수적인 Message 하위 클래스가 존재합니다.

바로 Stop Msg, Last Ack 입니다. 이 중 Stop Msg클래스를 살펴보면

 

그림 7 Stop Msg클래스의 Send Normal Stop.vi Method그림 7 Stop Msg클래스의 Send Normal Stop.vi Method

 

바로 Send Normal Stop.vi Method를 통해서 메시지를 Actor에게 전달합니다. Actor에게 메시지를 전달하면Stop Msg클래스의 Do.vi Method가 실행이 되는 메커니즘 입니다.

 

 

그림 8 Send Normal Stop.vi Method 블록다이어그램그림 8 Send Normal Stop.vi Method 블록다이어그램

 

그림 8 Send Normal Stop.vi의 블록다이어그램을 보시면 Enqueue함수 Stop Msg클래스를 전달하는 알고리즘을 볼 수 있습니다. 이렇게 Actor에게 Queue를 통해서 메시지를 전달합니다.


이해가 좀 되시나요? 당장은 이해가 잘 안될 수 있습니다. 당연합니다. 그러니 너무 초조해 하지 않으셔도 됩니다. ^^


정리를 하자면

  1. Actor클래스 및 Method 구현
  2. Method를 실행시키기 위한 Message클래스 구현
  3. Actor에게 Message클래스의 Send XXX.vi Method를 통해서 메시지 전달.
  4. Actor는 전달받은 Message클래스의 Do.vi Method를 실행.
  5. Do.vi에 있는 Actor클래스의 Method 실행.

 

입니다.

 

 

 3. Message Priority Queue, Message Enqueuer, Message Dequeuer, Message Queue


Actor Framework 라이브러리에 있는 나머지 클래스들은 모두 Queue와 관련된 클래스입니다. 기본적으로 Actor클래스가 실행될 때 이 클래스들은 Actor클래스 내부의 Method에서 호출되어 있기 때문에 같이 실행이 되면서 Queue 관련 기능들을 수행할 수 있도록 준비를 합니다.

Message Priority Queue클래스는 Queue를 생성하는 역할을 합니다.

Message Enqueuer클래스는 EnQueue(원소를 큐에 추가) 기능을 담당합니다.

Message Dequeuer클래스 DeQueue(원소를 큐에서 제거) 기능을 담당합니다.

Message Queue클래스는 Queue정보를 읽어오는 역할을 합니다
.

이처럼 Queue관련 클래스는 평소 우리가 사용하는 기능과 크게 다르지 않습니다. 이 부분은 Queue라고 가볍게 생각하고 넘어가시고 추후 이론과 실습의 과정을 거듭 거치면서 자세하게 알아보도록 하겠습니다.

 

그림 9 Queue 클래스 모음그림 9 Queue 클래스 모음

 

 

  1. 마치며…


    Actor Framework 구조에 대해서 설명을 간단하게 드렸습니다. 이해가 많이 안될 수 있습니다. 하지만 지금 현재 이 단계에서 모든 Actor Framework 라이브러리의 모든 클래스와 Method까지 이해를 하기 힘든 부분이 많으므로 구조에 대한 메커니즘만 알아보고 다음 시간에는 간단한 예제 실습을 통해 Actor Framework에 대한 감을 먼저 잡고 다음 단계로 넘어가도록 하겠습니다.

    간단한 메커니즘만 알려드렸지만 이해가 어려운 부분이 많을 수 있습니다. 현재 이 단계에서는 각 클래스의 기능과 역할만 꼭 숙지하시고 Actor Framework도 결국 Queue기반의 구조라는 것을 명심하시면 됩니다.


    감사합니다.
기여자