Appia의 IT세상

[Stateflow] Hierarchical State(State의 계층 구조) 본문

Programming/Stateflow

[Stateflow] Hierarchical State(State의 계층 구조)

Appia 2019. 12. 26. 06:59
반응형

오늘은 State 계층구조라는 주제로 이야기를 드리고자 합니다. 많은 프로그래밍 언어들이 계층 구조를 가지게 됩니다. 계층 구조에 대해서 간단히 살펴 보겠습니다. 그러면서 간단히 계층 구조를 만드는 방법 장점에 대해서 살펴 보고자 합니다.

State 계층구조

 

State 계층 구조를 가질 있습니다. 말은 State안에 또다른 State들을 가질 있다는 말입니다. 흔히 코드와 비슷하게 생각하셔도 됩니다. State 안의 계층화를 해두면 여러 상태에서 공통적으로 사용하는 Action 대해서 곳에서만 생성해도 되는 장점이 있습니다. 물론 항상 좋다고 수는 없지만, 저는 그대로 계층화 되어 있는 State 장점은 확실히 많다고 생각합니다.

여기서 흔히 말하는 Parent State를 Superstate라고 이야기드 합니다. 그리고 Childstate를 Substate라고 합니다. 그럼 다음과 같은 그림에서는 제가 몇가지 수정을 해서 다시 한번 보겠습다. 

이 로직에서 C= 0; 이라는 Action은 반복 되는 Action입니다. 하지만 각 State에서 동작을 하게 되어 있습니다. 이런 부분들을 다음과 같이 변경해보도록하겠습니다. 

그러면 C = 0이라는 동작이 이루어지게 됩니다. 물론, 상위 State에서 Substate가 있을 경우 바로 Substate에서 하나의 State로 향하게 됩니다. 따라서 계층화로 인하여 조금 더 가독성 및 로직에 부드러움을 추가할 수있다고 생각합니다. 하지만 앞서서 말한 바와 똑같이 이 또한 개발자의 선택입니다. 

 

 계층 구조 만들기(Superstate)  

간단한 예제로 계층 구조를 만들어 보도록 하겠습니다. 일단 Superstates를 만들 부분에 대해서 선택합니다. 

그런 이후 선택한 부분 위에서 마우스 오른쪽 버튼을 눌러 줍니다. 

여기에서 [Create Container] - [Create Superstate from Selection]을 선택해 주십니다. 

그런 후 State의 이름을 입력해주시고, Default Transition으로 Superstate를 연결해주시면 끝납니다. 

Subchart

물론, 이 뿐 아니라 Subchart라는 개념도 존재합니다. 이 개념은 Simulink를 알고 있으신 분들에게 조금 더 쉬운 개념일 수 있습니다. Superstate와 크게 다르지 않지만 이 부분은 Simulink의 Subsystem이라고 생각하시면 됩니다. 즉 크게 다르지 않지만, 안의 내용에 대해서 숨겨 있다고 생각하시면 됩니다. 

 

위의 계층 구조 만들기에서 [Create Container] - [Create Subchart from Selection]를 생성하시면 됩니다. 그럼 다음과 같이 만들어 집니다. 

Subchart - Superstate는 근본적으로 크게 다르지 않습니다. 하지만 보여지는 관점 등과 다양한 부분에서 미세한 차이가 있을 수 있습니다. 다음 포스팅에는 데이터의 전역화 / 차트내에서의 지역함수로서의 사용등에 대해서 한번 살펴보도록 하겠습니다. 

반응형
Comments