UIPath Academy : 005. Control Flow in Studio

jwKim·2023년 10월 4일
0

🤖 UIPath

목록 보기
8/16

1. Control Flow

1-1. Control Flow Overview

흐름 제어(control flow)를 알기 전에 워크플로우에 대해 간략히 알고 가자.

UIPath에서 제공하는 workflow는 Sequence, Flowchart, State Machine, Global Exception 타입이 있다.

  • Sequence : 여러 액티비티가 업무 흐름에 따라 명확하게 설명이 되는 형태(지금까지 사용한 워크플로우)
  • Flowchart : 개별 업무 단계를 확인하는 것은 어렵지만 전체적인 업무 흐름을 파악하기 좋은 형태
  • State Machine : 횔성화 된 액티비티에 따라 워크플로우 자체가 확성화 혹은 비활성화 되는 워크플로우(무슨 소리일까)
  • Global Exception : 예외처리를 위한 워크플로우

이 중 이번에는 Sequence와 Flowchart를 중점으로 생각해보자.

흐름 제어문이 수행하는 주요한 동작은 조건 제시, 반복, 병렬처리이다.

  • 조건문 : If, Else If, Switch
  • 반복문 : While, Do While, For Each
  • 병렬처리 : Parallel

1-2. The If Statement

if문은 아래와 같이 동작한다.

  1. 제시된 조건과 데이터가 같은지 확인
  2. 조건에 부합할 때(True일 때) 지정된 동작 수행
  3. 조건에 부합하지 않을 때(False일 떄) 지정된 동작 수행

if문의 개념을 사용한 액티비티는 두 가지가 있다. IfFlow Decision이다. If는 Sequnece 워크플로우에서 데이터의 값으로 조건과 비교하고, Flow Decision은 Flowchrat 워크플로우에서 프로세스 자체를 조건과 비교한다.(사용되는 워크플로우가 다름)

If 액티비티와 더불어 Else If 액티비티도 있다. 조건에 부합하지 않을 떄(False일 떄) 수행할 동작을 여러 개 명시하기 위해서이다. (Else If 하나로 세 개 이상의 분기처리 가능, 아래 이미지 참고)

분기처리를 하는 또 다른 방법은 VB 문법을 사용하는 것이다.

if(조건, True일 때 값, False일 때 값) 

'여러 조건 제시
if(조건1, True일 떄 값, if(조건2, 조건1 Fase & 조건2 True일 떄 값, 조건1 Fase & 조건2 False일 떄 값))

1-3. Loops

반복문은 코딩을 배울 때 분기문과 더불어 중요하게 배우는 것이다. UIPath에서는 아래와 같이 반복문을 구현해 놓은 액티비티가 있다.

  1. Do while : 먼저 한 번 수행한 후 조건에 부합하면 계속 실행
  2. While : 조건에 부합하면 계속 실행
  3. For Each : 입력받은 collection에서 인자를 하나씩 꺼내 반복 수행

Do While과 While의 차이점은 첫 번째 실행 시 조건을 비교하냐 마냐 차이이다. Do While은 첫 번쨰 반복에는 조건 비교 없이 동작한다.

반복도 중요하지만 원하는 때에 반복을 중단하는 것도 중요하다. 반복을 중단하는 방법은 아래와 같다.
1. (Do) While : 조건에 부합하지 않으면 반복 중단
2. For Each : collection 안에 있는 모든 인자를 다 꺼냈을 때 반복 중단
3. Break 액티비티 : 위에 명시한 세 가지 반복문에서 Break 액티비티를 사용해서 중단 조건을 줄 수 있음

Do while을 실습해보자. 사용자에게 년도를 입력받아 그 년도가 윤년인지 아닌지 판단하는 문제에이다.

위에서 보면 Do While의 조건을 "not IsLeapYear로 줬다. 왜냐하면 Do While은 조건에 부합하는 한 계속 반복되는데, 만약 사용자가 윤년이 아닌 값을 넣으면 계속 실행해야 하기 때문에 not이 붙은 것이다.

1-4. Switch

어떤 값을 기준으로 분기처리가 필요할 때 사용하는 제어문이다. 기본 컨셉은 if문이 세 개 이상 결합된 형태이다. 예를 들면 아래와 같다.

[ switch 예시 ]
사용자에게 입력을 받는데, 그 입력값이 "A", "B", "C", "D"일 때 각각 처리하는 동작을 달리 하라

SQL의 CASE문과 같다.

if문과 다른 점은 조건으로 받는 표현식이 Boolean 타입이 아니라 String이나 Numeric 값을 받는다. UIPath에서는 예외적으로 String을 받을 떄 쌍따옴표(")를 쓰지 않고 변수처럼 써준다.

1-5. Parallel

Parallel 액티비티는 지정한 하위 동작(=child activities)들을 동시에 처리할 수 있게 해준다. Parallel 하위에 지정된 동작들이 모두 완료 되거나 '완료 조건'이 True일 때 동작을 중지한다.

하위 동작들을 동시에 수행하기 때문에 효율적이다.

병렬처리를 하는 또 다른 액티비티로는 Pick이 있다. Pick에 대한 설명은 아래 링크를 참고하자.
https://jnaul.tistory.com/269

parallel 아래에는 child activity가 하나의 레벨 밖에 지정할 수 없다.(액티비티를 여러 개 쌓을 수 없고 한 개만 들어갈 수 있음) 그래서 여러 개의 액티비티를 넣어야 할 때에는 아래와 같이 sequence를 넣고 액티비티를 쌓을 수 있다.



2. Control Flow 실습

2-1. For each문 & If문

2-1-1. 과업 설명

이번 실습 과제에서 수행할 내용은 아래와 같다.

  1. 각 엘리먼트가 Int32로 된 array를 하나 선언한다.
  2. for each를 돌면서 최대값, 최소값을 찾아 출력한다.

2-1-2. 구현

  • 최대값과 최소값은 array의 첫 번째 원소로 지정하고 for each를 돈다.
  • for each 하위에는 parallel을 넣어 가독성과 수행 속도를 높였다.
  • 최대값과 최소값을 판단한다.

2-2. Switch문

2-2-1. 과업 설명

이번 실습 과제에서 수행할 내용은 아래와 같다.

  1. 문자열 array 선언 {"Ax001","Ax002","Ax003","Ax004","Ax005","Bx001","Bx002","Bx003","Cx001","Cx002","Cx003","Cx004"}
  2. 각 원소 별로 앞에 두 글자 분리 → "Ax", "Bx", "Cx"
  3. 각 분리한 글자를 각각 array에 저장

2-2-2. 구현

  1. for each
    for each를 돌며 각 엘리먼트에 접근한다.

  2. switch
    for each문 하위에 swtich가 위치하는데 아래와 같다.

    조건은 엘리먼트에서 인덱싱하는 String.Substring 함수를 썼다.
    Case문에는 저장할 값을 Array.Concat 함수를 썼는데, 이 때 인자를 넣는 방법이 신기하다. 대괄호({ })를 써주는 것이다. 왜냐하면 concat하려면 array 형태가 되어야 하기 때문이다.

  3. 출력
    결과 출력을 위해서 String.Join 함수를 썼다.(파이썬의 join과 동일한 동작)

선언한 변수는 아래와 같다. AxArray, BxArray, CxArray의 초기값을 각각 "Ax", "Bx", "Cx"로 선언했는데, concat할 때 원소가 없으면 에러가 발생하기 때문이다.

0개의 댓글