매크로

조회 수 6435 추천 6 댓글 67


안녕하세요 바람처럼 입니다~ 오랫만에 프렙 강좌로 찾아뵙는군요~^^


오늘은 프렙에서 가장 아쉬운 기능중에 하나인 변수를 확장하여


고정변수가 아닌 다이나믹하게 변하는 변수 및 배열 구현법에 대해서 알아보겠습니다...




1. 변수의 정의


우선 변수의 정의부터 알아보자면, 정의된 값이 다양하게 변하는 (혹은 변할수 있는) 매개체라고 할수 있습니다.


즉, 고정된 상수값이 아니라 필요와 용도에 따라 그 값을 마음껏 재정의 할수 있다는 뜻이죠.


프렙에서 변수는 Number, Rectangle, String 3가지 타입을 갖고 있으며


변수명 = 타입 : 값 의 형태로 정의됩니다.


예를 들자면, var1 = num:35 / var2 = str:"abc" / var3 = rect:(1 2 3 4) 의 형식입니다.


여기서 변수명은 고정값입니다. 따라서 이 값은 프렙구문에 명확히 지정해야 하며 다른값으로 대체할 수 없습니다.


대부분의 프로그래밍 언어에서도 변수명은 대체하거나 변경할 수 없도록 되어 있습니다만


간혹 오토핫키 같은 일부 언어에서는 다이나믹 변수, 즉 변수명 자체를 대체할 수 있는 기능을 지원합니다.


사실 다이나믹 변수는 프로그래밍 관점에서 권장되는 기능은 아닙니다만, 간혹 필요한 경우가 있습니다.


예를 들자면, 학년-학급-번호=이름으로 구성된 데이터가 있다고 할 때


2학년의 모든 30번 이름을 알기 위해서는 2학년-1반-30번, 2학년-2반-30번, 2학년-3반-30번... 처럼


일일이 해당하는 학년-학급-번호을 모두 입력해서 값을 읽어와야 합니다.


다이나믹 변수를 사용한다면 간단하게 루프를 돌려, 2학년-%학급%-30번 처럼 쉽게 해결할 수 있습니다.


사실 이런경우 다이나믹 변수의 사용을 피하기 위해 클래스나 오브젝트 혹은 하다못해 배열을 사용하곤 합니다만


아쉽게도 프렙은 그 모든것들중 지원하는 것이 아무것도 없다보니 어쩔수 없이 만들어 써야겠습니다~^^;;





2. 다이나믹 변수의 구현


다이나믹 변수의 구현원리는 간단합니다. 컴퓨터가 변수를 메모리에 보관하여 관리 하듯이


우리도 별도의 메모리 영역을 만들어 변수를 보관하는 방식입니다.


이를 위해 우리는 DynVar 라는 이름의 String 형식의 변수를 만들어 메모리로 이용합니다.


최초 이 변수의 정의는 간단합니다. 


DynVar = str : ""


이렇게 정의된 영역에 우리가 사용할 변수들을 지정하여 읽기/쓰기/교체를 구현할 수 있습니다.


변수의 구성은 일반적인 형식을 따라 key = val 의 구성으로 이루어 집니다.


먼저 변수를 정의하기 위해 key 값과 val 값을 지정합니다.


key = str : "2학년-1반-1번"

val = str : "홍길동"



그런다음, 이 값을 저장합니다. 먼저, 같은 값이 있는지 확인해 봐야겠죠?


https://i.imgur.com/rk7nQ0a.png



만약 해당 변수가 없으면


https://i.imgur.com/Q5ewJ7M.png



새로운 값을 우리가 지정한 영역에 써줍니다.


https://i.imgur.com/mibThdc.png



만약, 기존에 정의된 값이 있다면 값을 교체합니다.


https://i.imgur.com/dmbvLDd.png



이런 식으로 변수값을 초기화하면, DynVar 영역내에 우리가 지정한 값들이 다음과 같이 저장됩니다

2학년-1반-1번=홍길동
2학년-1반-2번=박기영
2학년-1반-3번=최영희
2학년-1반-4번=김철수
........



이렇게 지정된 값은 어떻게 읽어 올까요? 아주 간단합니다.

우선 key 값을 정의 합니다.

key = str : "2학년-1반-3번"

그런다음 DynVar 영역내에서 변수값을 읽어오면 됩니다.

위에 변수를 쓸때와 마찬가지로 우선 같은 키값이 있는지 찾아봅니다.

https://i.imgur.com/rk7nQ0a.png


값이 있으면 읽어 옵니다.

https://i.imgur.com/iBPBzyu.png


키값이 없다면 공백값을 리턴합니다.

https://i.imgur.com/Kw7Ef9N.png



이렇게 해서 읽어오면, val 값에는 "최영희" 가 들어오게 됩니다.


위에서 살펴본 과정을 2개의 프로시져로 만들어 두면 우리는 앞으로 편리하게 사용할 수 있게됩니다.

https://i.imgur.com/pae8u2x.png

https://i.imgur.com/AGxVlmE.png






3. 루프와 다이나믹 변수의 결합

이렇게 구현된 다이나믹 변수를 루프와 결합하게 되면, 배열변수처럼 사용할 수 있게됩니다.

그럼 처음에 예로 들었던 문제에서 2학년에 모두 10개의 학급이 있다고 할때, 

모든 학급의 30번 이름을 읽어오려면 어떻게 구현하면 될까요?


우선 우리가 메모리로 사용할 DynVar 변수값을 초기화 해줍니다.

https://i.imgur.com/fkUQrJd.png


그다음 루프를 정의 합니다. 

프렙에서 루프는 0에서 시작하므로 우리는 편의를 위해 11개 루프를 돌린후 처음값을 건너뜁니다.

https://i.imgur.com/1UJfoE1.png


그런다음 읽어올 키값을 정의합니다.

https://i.imgur.com/k3csIEA.png


이렇게 하면 key 값에는 "2학년-(루프값)반-30번" 이 정의됩니다.

그다음 조금전 만들어 두었던 변수읽기 프로시져를 불러서 값을 읽어오면 끝나게 됩니다.


이 모든 과정을 한번에 살펴보면 다음과 같이 됩니다.

https://i.imgur.com/HIgiLwn.png


어떻습니까? 아주 간단하죠? 

그렇지만 이렇게 간단한 2개의 프로시져를 통해 우리는 다이나믹 변수와 배열을

프렙에서 마음껏 사용할 수 있게 되었습니다... 



실제로 프렙을 이용해 매크로를 제작하다보면, 이런 다이나믹 변수를 사용한것과 그냥 구현한 것과는

효율이나 크기뿐만 아니라 필요한 노력과 시간에서도 많은 차이를 보이게 됩니다.

그렇다고 다이나믹 변수가 기존 프렙의 고정변수와 비교해 속도차이가 나지도 않으니

제대로만 이용하면 프렙을 이용한 제작에 큰 도움이 될것이라 생각합니다.

아무쪼록 이 강좌가 여러분들께 많은 도움이 되었으면 합니다.


감사합니다~^_^




List of Articles
제목 글쓴이 최근변경 추천
프렙으로 페이스북 복사한글 붙히기 1 kakasi78 2018.11.27 3/0
프렙에서 타이머를 써보자~! 179 바람처럼 2023.01.16 17/0
프렙에서 다이나믹 변수를 써보자~! 67 바람처럼 2023.11.14 6/0
프렙 3.8 의 새로운 기능들 104 바람처럼 2023.05.26 12/0
프렙 3.7 의 새로운 기능... 응용편 #2 (영역 & 이미지) 155 바람처럼 2023.07.20 19/0
프렙 3.7 의 새로운 기능... 응용편 #1 (루프 & 스트링) 107 바람처럼 2021.07.19 11/0
밖에서 frep이 무슨 아이템을 먹고 있나 확인을 해보자... 117 쉐브 2022.11.08 8/0
[Frep] 세나-쫄작 스퀸즈 만들기 방법(엑셀자료) 115 두환애비 2023.01.22 19/0
프렙 3.7 의 새로운 기능... 조건문(If), 로그(Error, ... 95 바람처럼 2020.12.25 16/0
프렙 3.7 의 새로운 기능... 변수(Variables) 기초편 114 바람처럼 2021.01.04 18/0
[몬길] frep 매크로 아주 간단하게 따라하며 만들기 2편 94 오렌지케이크 2024.01.04 10/0
[몬길] frep 매크로 아주 간단하게 따라하며 만들기 1편 195 오렌지케이크 2021.05.25 24/0
세나] 프렙으로 대동단결 2탄 - 프렙 강좌(1) 19 옹스컴 2023.07.27 1/0
[Frep] 쫄교체 매크로 동영상 강좌 2 76 제이먼청 2023.07.21 6/0
[Frep] 쫄교체 매크로 동영상 강좌 1 101 제이먼청 2023.01.22 15/0
간단하게 만드는 7-9쫄 기반 세븐나이츠 3쫄 교체(3) 76 제이먼청 2020.12.24 9/0
간단하게 만드는 7-9쫄 기반 세븐나이츠 3쫄 교체(2) 41 제이먼청 2020.12.24 8/0
간단하게 만드는 7-9쫄 기반 세븐나이츠 3쫄 교체(1) 77 제이먼청 2023.07.27 10/0
세나 프랩 간단하게..강좌 117 김부관 2020.12.24 19/0
프렙의 단순작업 도우미... 프로시져 (Procedure) 123 바람처럼 2020.12.23 20/0
Board Pagination Prev 1 2 Next
/ 2

전체 최신 인기글

전체 주간 인기글