ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UiPath 기초] 2. 변수(Variables) - 2
    UiPath RPA/개념 및 기초다지기 2019. 12. 8. 23:39
    반응형

    변수에 대한 개념을 1개의 포스트만으로 정리하기 버거워 나눠서 정리하였습니다. 이번시간엔 UiPath 뿐만 아니라 프로그래밍에서도 숨쉬듯 자주 쓰는 DateTime 구조체를 통해 '초기화'와 '대입', 그리고 반환(=return)에 대한 개념을 익히는 시간을 가져보겠습니다.

    새로운 프로젝트를 생성하고 아래 순서에 따라 차근차근 진행해보시기 바랍니다.

     

    1. 변수 DateTime_오늘 생성

    변수생성창에서 "DateTime_오늘" 이라는 이름을 가진 변수명을 생성합니다.

    2. 변수유형 선택

    String으로 설정된 변수 유형을 선택하여 "형식 찾아보기"를 선택하세요.

    3. DateTime 찾기

    팝업창 표시와 함께 .NET 및 UiPath를 구성하는 라이브러리 및 네임스페이스가 나열됩니다. 이름 입력란에 'DateTime' 을 입력하신 후, mscorlib > System > DateTime 을 선택하세요.

    라이브러리 : 프로그램 개발시 자주 사용하는 함수, 구조체, 클래스등을 하나의 파일(.dll) 형식으로 만들어두고 개발시 해당 라이브러리를 참조하여 개발시간을 단축하기위한 집합체를 나타내는 프로그래밍 용어이자 파일을 가리킬때 사용하는 단어입니다. 종종 .dll 로 끝나는 확장자명을 가진 파일들을 보신적이 있으실텐데요. 그 파일을 라이브러리라고 합니다. UiPath를 빗대어 설명하면, 지난 시간부터 사용해 온 Read CSV, Send HotKey 등 자주 사용하는 Activity를 '함수'라고 표현할 수 있으며, 이 Activity들을 가져와 사용할 수 있도록 UiPath 기능으로 구성되어 있는 .dll 파일을 '라이브러리' 라고 표현할 수 있겠군요.

     

    프로젝트 창에 보이는 "종속성" 항목에서 "UiPath."으로 시작되는 요소들이 '라이브러리'입니다. 한 프로그램에는 여러개의 라이브러리로 구성되어 있으며, 그 중 Send HotKey와 같이 Windows 환경에 명령을 전달하는 Activity들은 "UiPath.UIAutomation.Activities" 라는 이름을 가진 라이브러리 안에 포함되어 있습니다. 따라서, 

    파멸(?)을 부르는 행동

    위 이미지와 같이 마우스 오른쪽 버튼을 눌러 "종속성 제거"를 실행할 경우,

    Send Hotkey 이었던 것

    위와 같은 참사(?)가 발생할 수 있습니다. :)
    물론 "패키지 관리" 기능 통해 복원가능하므로 실수로 삭제하셨더라도 당황하지 마십시오. "패키지 관리"에 대해선 향후에 다루도록 하겠습니다.

    네임스페이스 : .NET에서 프로그램 개발시 참조하는 라이브러리를 소스코드에서 참조하기위한 논리적(?) 주소로서 . 으로 위치를 구분합니다. 라이브러리 파일명과 네임스페이스가 동일한 경우도 있지만, 라이브러리 명과 네임스페이스는 별개라고 보시면 되겠습니다.
    이번시간에 사용하는 System.DateTime의 네임스페이스 "System"과 라이브러리명 mscorlib.dll 는 전혀 다르니까요.

    UiPath나 .NET Framework에서 제공하는 라이브러리들의 변수 유형이나 함수등을 다 외울 필욘없습니다. 이 중에서 자주 쓰는것은 10%도 안되며(혹시 나만 안되는건가..?), Google한테 물어보면 대부분 확인이 잘 됩니다.
    괜히 구글신 구글신 거리는게 아닙니다.

     

    4. 변수초기화

    DateTime을 선택하고 확인버튼을 누르셨다면 "DateTime_오늘" 변수의 타입이 DateTime으로 바뀌신걸 확인할 수 있으실 것입니다. DateTime은 여러가지 함수나 값을 지니고 있는데요. 그중 Now는 말그대로 "당장"의 날짜와 시간 값을 가진 DateTime 변수입니다. DateTime_오늘의 기본값을 다음과 같이 설정해주세요.

    DateTime.Now

    이제 DateTime_오늘은 자동화프로세스를 실행할때마다 실행한 시점의 시간과 날짜값을 가지게 될 것입니다.

    아마 Now가 아닌 Today를 발견하신분도 계실텐데요. 이번 실습에선 Today를 사용해도 동일한 결과가 나오지만 차이점은 있습니다.


    Now : 현재 날짜 및 시간
    Today : 현재 날짜 (시간은 00:00:00 로 고정)

     

    이번 파트에서 '초기화' 라는 단어가 나왔습니다. 프로그래밍에서 어떤 변수를 선언함과 동시에 해당 변수에 값을 입력해주는것을 '초기화' 라고 하는데요. UiPath에선 기본값 영역에 값을 지정해주는 행위를 초기화라고 보시면 되겠습니다.
    초기화를 설명하면서 튀어나온 '선언'은 변수의 이름과 유형(=Type)을 지정해주는 행위로서 프로그래밍에서도 이를 '선언'한다고 표현합니다. 그런데 실상은 변수를 '만든다','생성한다', '쓴다' 등등등 다양한 용어(?)로 통용되고 있으니 크게 구분지을 필요는 없습니다.

     

    프로그래밍에선 변수의 초기값만 설정하고, 다시는 다른 값을 설정할 수 없는 개념도 존재하지만, 19.10 버전을 기준으로 초기값만 설정가능한 변수를 만드는 기능은 없으므로 그냥 '그렇구나' 라고 넘어가셔도 됩니다. ㅎㅎㅎ

     

    5. Message Box 액티비티 추가

    Message Box 액티비티를 찾아 추가합니다. Message Box 액티비티는 입력한 문자열 데이터를 표시하는 단순한 팝업창을 표시합니다. 개발 진행 중 중간에 데이터가 어떻게 가공되었는지 확인할 때 사용하곤 합니다.

     

    6. Message Box에 표시할 문구입력

    Message Box에 표시할 문자열을 다음과 같이 입력하세요.

    "오늘은 " + DateTime_오늘.ToString("yyyy-MM-dd") + " 입니다."

     

    ToString은 이전에 사용했기 때문에 어떤 함수인지 감이 오실 것입니다. 그런데 "yyyy-MM-dd"는 처음보실텐데요. 이는 날짜를 문자열로 변환시킬때 해당 함수를 사용하는 사용자(=여러분)가 지정하고 싶은 형식으로 표시할때 사용하는 서식 문자열입니다. yyyy는 연도(=year)를 4자리 숫자로 표현하겠다는 의미이며, MM은 월(=Month)을 01,02...12와 같이 반드시 2자리 형식으로, dd는 일(=day)을 01,02...31과 같이 반드시 2자리로 표현하겠다는 의미입니다.


    MM만 대문자인 이유는 시간 구성요소중 분(=minute)단위에 대한 서식을 소문자 m으로 사용하기 때문입니다.
    서식없이 .ToString 함수만 사용해도 Windows에 설정된 날짜 표기형식에 따라 값을 문자열로 바꿔줍니다. 하지만 향후 웹사이트에서 데이터를 조회하거나 프로그램에서 기간을 입력할때 2019/01/01 과 같이 입력이 필요한 경우가 존재하므로 서식은 알아두시는게 좋습니다.

    보다 자세한 내용은 아래 사이트를 참조해주세요.
    https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/custom-date-and-time-format-strings

     

    사용자 지정 날짜 및 시간 형식 문자열 - .NET

    사용자 지정 날짜 및 시간 서식 문자열Custom date and time format strings 이 문서의 내용 --> 날짜 및 시간 형식 문자열은 형식 지정 작업에서 생성되는 DateTime 또는 DateTimeOffset 값의 텍스트 표현을 정의합니다.A date and time format string defines the text representation of a DateTime or DateTimeOffset value that resul

    docs.microsoft.com

    7. 디버그

    결과가 어떻게 나오는지 확인해보겠습니다.

    다됐습니다!
    ....
    이대로 끝나긴 섭하겠죠? 곧바로 다음날짜를 출력하도록 기능을 추가해보겠습니다.

     

    8. Message Box 추가

    Message Box 액티비티를 하나 더 만들고 아래와 같이 작성해주세요.

    "그 다음날은 " + DateTime_오늘.AddDays(1).ToString("yyyy-MM-dd")

    AddDays는 입력한 숫자만큼 일자를 추가하여 DateTime 값을 반환(=return)하는 함수입니다. 1을 입력했기 때문에 오늘 + 1일 인 내일날짜가 표시될 것입니다. 만약 어제날짜가 필요하다면 -1을 더해주시면 됩니다.
    반환한다는 용어는 프로그래밍에서 어떤 함수의 작업 결과값을 다음 작업에서 사용할 수 있도록 함수 밖으로 전달해주는 것을 의미합니다.
    UiPath에 있는 액티비티들 중에 Output이란 속성을 보셨을 것입니다. Output에 맞는 형식의 변수이름을 입력하면, 

    그리고 실행하시면 "오늘은~" 메시지 박스가 나타나고, 확인버튼을 누르면 "그 다음날은~" 메시지 박스가 나타날것 입니다.

    이제 끝? 아뇨 다다음날을 표시해보겠습니다.

     

    9. Message Box 1개 더 추가

    AddDays(1)이 다음날이 이라고 했으니 2를 입력한 메시지박스를 추가하면 되겠군요. 허나 전 이렇게 표현해 보겠습니다.

    "그 다음날은 " + DateTime_오늘.AddDays(1).AddDays(1).ToString("yyyy-MM-dd")

     

    AddDays() 함수의 반환값이 DateTime 유형이므로, 바로 AddDays(1) 를 또 호출할 수 있습니다. 단, ToString() 함수 뒤에는 사용할 수 없습니다. ToString() 함수가 호출된 결과 값은 String 타입으로 반환되기 때문입니다.

    이것으로 다다음날도 표시하게 되었습니다. 그럼 그다음날은 어떻게할까요? 계속 추가해 넣어야 할까요?

     

    10. For Each 추가?

    똑같은 반복작업을 자동화하기위해 나온것이 RPA에 인데 졸지에 개발자가 반복작업하게 생겼습니다. (물론 실제로 반복하지만) 이전에 사용했던 For Each Row 액티비티와 같이 반복수행되는 액티비티가 필요해보입니다. 그런데 이번엔 테이블변수가 없습니다. 따라서 For Each Row는 물건너 갔네요. 그럼 비슷한 For Each를 써볼까요?

    흐음..
    도대체....
    뭘 넣으란 거야?

    For Each는 다음 기회에 쓰도록 하겠습니다.
    .NET 개발자라면 해당 값이 어떤 타입인지 아시겠지만, 모른 척 해주세요. 🤐

     

    11. 변수대입

    반복 액티비티를 추가하기에 앞서 .AddDays를 계속 사용하는 굴레(?)에서 벗어나야 겠습니다. Assign 액티비티를 추가하고 아래와 같이 작성해주세요

    DateTime_오늘 = DateTime_오늘.AddDays(1)

    12. Message Box 복사

    이번엔 Assign 액티비티 위에 있는 Message Box 액티비티를 Assign 아래에 복사(Ctrl+C), 붙여넣기(Ctrl+V) 해보겠습니다. 

    F5를 눌러 디버깅해보면 동일한 String 값을 가진 Message Box 액티비티임에도 불구하고, 다음날짜로 표시되는 것을 확인할 수 있습니다. 따로 설명하지 않아도 Assign 액티비티의 역할이 대충 유추될 수 있는대로 이를 '대입한다' 라고 표현합니다. 종종 대입하여, 대입하고 와 같은 표현이 나오면 Assign의 역할을 떠올려주시기 바랍니다.

    값을 대입한다는 뜻이 반드시 변수 자신의 값을 변환하는 함수를 호출하여 나온결과를 받겠다는 뜻이 아닙니다. 아래와 같은 예시도 대입입니다.

    Int_개수 = 1
    DateTime_시작날짜 = DateTime.Parse("2019-01-01")

    13. While 반복 액티비티 추가

    액티비티 창이나 검색에서 While 액티비티를 찾아 추가해주세요.

    While과 함께 검색한 Do While은 공통적으로 조건이 참(true)이면 계속 내부 액티비티들을 반복 수행하는 반복 액티비티입니다. 단, 조건부터 보고 조건이 맞지않으면 실행하지 않을 것인지(While), 일단 1회 실행후 조건을 확인하여 반복실행 할 것인지의 차이가 있습니다(Do While).

     

    14. 조건을 위한 Int_i 변수 추가

    While을 일정횟수까지만 반복하게 만들기위해 Int형 변수를 하나 만들겠습니다. 기본값은 0으로 설정해주세요.

    15. 조건 삽입 및 Assign 액티비티 추가

    While 액티비티의 조건(=Condition) 입력란에 아래와 같이 입력해주세요.

    int_i < 4

    <는 비교연산자로서, int_i 가 4보다 작은 경우 참(True), 크거나 같을경우 거짓(False)을 나타냅니다. int_i 초기값이 0이므로, '0은 4보다 작다'는 뜻의 0 < 4은 참(True)이 될 것입니다.

    하지만 int_i 를 계속 0 값인 채로 두면 While의 반복조건이 계속 참(True)이게 되므로, 무한 반복 상태인 '무한 루프'에 빠지게 될 것입니다. 이를 방지하기위해 Assign을 추가하고, 아래와 같이 입력해주세요.

    16. 액티비티 옮기기

    반복 액티비티는 처리가 되었으니, 밖에 만들어두었던 Message Box와 DateTime 대입작업을 마우스 끌어 While 안에 배치 시켜주세요.

    마우스 드래그로 액티비티 재배치
    배치가 완료된 모습

    17. 불필요 액티비티 정리

    개발방향을 바꾸고나니 앞서 생성했던 액티비티가 불필요해졌습니다. 삭제할 액티비티를 선택하고 [delete] 키를 눌러 제거해주세요.

    두번째 Message Box 제거 전
    두번째 Message Box 제거 후

    18. 불필요 코드(Code)정리

    While 안에 배치시킨 MessageBox에서 AddDays(1)을 제거합니다.

    19. 결과확인

    F5를 눌러 최종결과를 확인해봅니다. 맨위에 배치된 "오늘은~" Message Box를 제외하고, 4개의 메시지 박스가 나타나야 야 합니다.

    첫 번째 횟수에선 Int_i 변수가 0이므로, 0 < 4 = 참 -> 메시지 박스출력
    두 번째 횟수에선 Int_i 변수가 1이므로, 1 < 4 = 참 -> 메시지 박스출력
    세 번째 횟수에선 Int_i 변수가 2이므로, 2 < 4 = 참 -> 메시지 박스출력
    네 번째 횟수에선 Int_i 변수가 3이므로, 3 < 4 = 참 -> 메시지 박스출력
    다섯 번째에선 Int_i 변수가 4이므로, 4 < 4 = 거짓 이 됩니다. 따라서 메시지 박스는 종료됩니다.

    비교연산에 대한 보다 자세한 설명은 아래 사이트를 참조해주세요.

    https://docs.microsoft.com/ko-kr/dotnet/visual-basic/language-reference/operators/comparison-operators

     

    비교 연산자 - Visual Basic

    비교 연산자(Visual Basic)Comparison Operators (Visual Basic) 이 문서의 내용 --> 다음은 Visual Basic에 정의 된 비교 연산자입니다.The following are the comparison operators defined in Visual Basic. < 연산자< operator <= 연산자<= operator > 연산자> operator >= 연산자>= operator = 연산자= operator <>

    docs.microsoft.com

    이것으로 변수의 초기화, 대입, 반환 용어 설명하려다가, While 반복문에 비교 연산자까지 패키지로 묶은 채 설명하여 분량조절 실패한 포스트를 마치도록 하겠습니다. 🤮
    (근데 아직 다 끝난게 아닙니다. 헉)

    2_변수2.zip
    0.01MB

    반응형

    댓글

Designed by Tistory.