오토핫키 커뮤니티

조회 수 4485 추천 23 댓글 124

원본 블로그 글 : http://knowledgeisfree.tistory.com/109

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

 

개발자는 깔끔하고 일관성있는 코드를 작성하는것이 중요합니다
규모가 큰 프로젝트를 진행중이라면 더욱 중요하죠, 코드의 상태가 프로그램의 유지보수에 많은 영향을 끼치기 때문에요

 

그래서 제가 코드를 최적화하기 위해 사용했던,하고있는 방법 몇가지를 소개하고자 합니다
많은 분들이 영감을 얻었으면 좋겠어요. 시작하겠습니다

 

01. 변수 값저장, 함수호출은 콤마로 연속해서 작성

 

변수에 값을 저장할때, 일반적으로는 아래처럼 코드를 작성합니다

 

이름 := "예지력"
성별 := "남성"
거주지 := "서울"

 

변수의 종류가 적은 경우, 위 처럼 작성해도 코드가 크게 길어지진 않지만
변수의 종류가 많은 경우에는 저장할때마다 다음줄로 넘겨주니 코드가 길어지죠


그런데 알고 계셨나요?

변수는 콤마(,)로 넘기면서 저장할 수 있습니다

 

이름 := "예지력", 성별 := "남성", 거주지 := "서울"

 

함수의 경우도 마찬가지입니다

 

함수1(), 함수2()

 

이는 깔끔한 코드를 유지할 수 있는것 뿐만 아니라 코드의 속도를 약 35% 높여줍니다

 

 

02. 비슷한 변수끼리는 오브젝트로 저장해두기

 

변수를 많이 사용하는 경우, 가끔 변수끼리 헷갈려 잘못 사용하거나 이름을 까먹는 경우가 있죠
비슷한 종류의 변수끼리는 함께 묶고싶은 경우도 있고요

 

이름1 := "예지력", 성별1 := "남성", 거주지1 := "서울"
이름2 := "독자", 성별2 := "여성", 거주지 := "서울"

 

이렇게 이름1,이름2,이름3.. 늘리며 저장하기엔 번거롭고, 나중에 변수를 사용할때도 헷갈릴 수 있습니다
이런 경우에, 변수를 오브젝트로 저장해두도록 하면 편하죠

 

시민1  := {이름: "예지력", 성별: "남성", 거주지: "서울"}
시민2 := {이름: "독자", 성별: "여성", 거주지: "서울"}
MsgBox % "시민1이름-" 시민1.이름 "`n시민1성별-" 시민1.성별 "`n시민1거주지-" 시민1.거주지

 

시민1.이름 := "변경된 이름"
시민1.성별 := "변경된 성별"
시민1.거주지 := "변경된 거주지"
MsgBox % "시민1이름-" 시민1.이름 "`n시민1성별-" 시민1.성별 "`n시민1거주지-" 시민1.거주지

 

 

03. 반복적으로 사용되는 명령어는 함수로

 

명령어...
Send, a
Send, b
Send, c

 

명령어...
Send, a
Send, b
Send, c
명령어...

 

위 코드에서 Send 부분이 반복적으로 사용되는걸 확인할 수 있습니다. 중복되는 부분은 함수로 묶어서 코드의 일관성을 높여보세요

 

명령어...
SendFunc()

 

명령어...
SendFunc()
명령어...

 

SendFunc()
{
 Send, a
 Send, b
 Send, c
}

 

 

04. 셋타이머, 핫키 라벨은 함수로 전환 (함수바인딩)

 

SetTimer, 라벨, ... 
Hotkey, F1, 라벨 ...

 

라벨:
명령어...
return

 

일반적으로 이렇게 사용하지만, 라벨의 사용은 코드의 깔끔함을 해치고, 유지보수가 힘들어집니다
오토핫키 공식도움말에서도 라벨의 사용을 권장하지 않습니다. 같은 이유로 goto 또한.

 

따라서, 함수를 사용해야겠는데... 그냥 라벨명에다가 함수이름적으면 되는게 아닙니다

 

함수를 하나의 변수(사실, 오브젝트)에 저장하고 라벨부분에 변수로 넘겨야해요

 

BindFunc := Func("함수명")     ; '함수명' 함수를 BindFunc오브젝트에 저장
SetTimer, %BindFunc%, ...       ; BindFunc 오브젝트를 라벨로써 사용
Hotkey, F1, %BindFunc% ...

 

함수명()
{
 명령어...
}

 

 

05. %변수% 를 많이 사용한다면 % 변수 로 통일

 

오토핫키에서 트레디셔널이라고 불리는 방식으로 변수를 표현할때는 %변수% 를 사용합니다
트레디셔널 방식으로  변수를 사용하려면 아래 코드처럼 적어야합니다

 

이름 := "예지력", 성별 := "남자", 거주지 := "서울"
MsgBox, %이름% %성별% %거주지%

 

히자만 익스프레션 표현식을 사용하면 이럴 필요가 없죠

 

이름 := "예지력", 성별 := "남자", 거주지 := "서울"
MsgBox, % 이름 성별 거주지

 

 

06. 파일인스톨을 사용하는 경우, .zip 파일로

 

배,포할 프로그램이 실행파일외에도 다른 리소스가 필요할때 파일인스톨로 함께 컴파일하곤 합니다

 

FileInstall, 1.png, %A_Temp%\1.png
FileInstall, 2.png, %A_Temp%\2.png
FileInstall, 3.png, %A_Temp%\3.png
FileInstall ... ;언제 다 적지?

 

그런데, 이렇게 코드를 작성하려면 굉장히 귀찮습니다
이 문제가 코드가 길어지고 더러워보이는거 보다 더 심각하죠

 

이런 경우에는 리소스파일을 .Zip으로 압축하고, 프로그램 실행시 .Zip의 압축을 풀면 되겠습니다
* 윈도우 네이티브 오브젝트를 이용하니 알집과 같은 외부툴이 없어도 됩니다

 

FileInstall, 리소스.zip, %A_Temp%\리소스.zip, 1  ;ZIP 파일


Zip := ComObjCreate("Shell.Application")  ;쉘 오브젝트 생성
Folder := Zip.NameSpace(A_Temp "\리소스.zip")   ; .ZIP 압축파일 지정, 여기서는 임시폴더(A_Temp)\리소스.zip
NewFolder := Zip.NameSpace(A_Temp)                ; 압축을 풀 경로 설정, 여기서는 임시폴더(A_Temp)


NewFolder.CopyHere(Folder.items, 4|16)          ; 압축해제, 임시폴더(A_Temp)에 리소스.zip 압축을 품, 항상 덮어씌움


  • 세나짱짱굿 2016.12.18 02:32

    감사합니다

  • dens 2016.12.18 17:14

    감사합니다!

  • 랄루아 2016.12.24 12:48

    감사합니다

  • Suaa 2016.12.29 17:36

    감사합니다!

  • 강감찬2 2017.01.08 11:20

    감사합니다.

  • 처녀연아 2017.01.11 16:23

    감사합니다!!

  • 티렉스 2017.01.26 14:10

    감사합니다.

  • 우솔아빠 2017.02.02 15:58

    감사합니다 참고해서 한번 만들어 보겠습니다

  • 호야스토리 2017.02.03 10:42

    감사합니다.

    도움이 많이 되었습니다.

  • 세은이 2017.02.09 21:36

    감사합니다.

  • 로이 2017.02.10 11:33

    감사합니다.

  • 그린라이프 2017.02.15 02:13

    도움이 되네요 감사요^^

  • 뿌잉뽀잉요잉 2017.02.28 13:26

    요론건 비교적 쉽네요 ㅎㅎㅎ감사합니다.

  • 눈먼올빼미 2017.03.06 00:11

    감사합니다.

  • 샤넌 2017.04.04 02:43
    꿀팁! 파일인스톨 부분이 참 가슴 설레네요
  • 협공일격 2017.04.15 03:36

    감사합니다

  • dp 2017.05.18 22:03

    짧고 좋은팁들입니다. 감사합니다~

  • 호롤롤롤롤로 2017.05.25 07:17

    감사합니다!!!

  • 머어 2017.06.12 23:49

    감사합니다 ㅎㅎ

  • 시기다 2017.06.27 17:53

    감사합니다 ^^

  • fourms 2017.07.02 03:55

    잘배우고 갑니다

    1번이 속도도 빨라지는군요.. 라인이 줄어서 그런가

  • 뿌히히히 2017.07.02 21:10

    최적화가 중요하죠,...

  • 알모 2017.07.04 21:24

    팁 좋네요 &^&^

  • 마르띠에a 2017.07.10 17:41

    감사합니다.

  • 룬룬리루 2017.07.14 20:07

    라벨을 비권장함을 처음 알았네요!

  • 별될까말까 2017.08.11 21:03

    감사합니다!!

  • 팔비만 2017.08.21 21:40

    참고하겠습니다.!!

  • 봉달이 2017.08.22 15:23
    잘봤습니다!
  • 손정락 2017.09.15 21:58

    감사합니다.

    꿀팁이네요

  • 꾸기 2017.09.22 16:59

    잘봤습니다 ^^

  • 충녕군 2017.10.16 17:17

    좋군요 ~

  • 서아아빠 2017.10.22 09:17

    고맙습니다.

  • n603 2017.11.01 13:06
    감사하므니다
    G
    M
    T
    언어를 감지갈리시아어구자라트어그루지야어그리스어네덜란드어네팔어노르웨이어덴마크어독일어라오어라트비아어라틴어러시아어루마니아어리투아니아어마라티어마오리어마케도니아어말레이어말라가시어말라얄람어몰타어몽골어몽어바스크어버마어베트남어벨로루시어벵골의보스니아어불가리아어세르비아어세부아노세소토어소말리아어순다어스와힐리어스웨덴어스페인어슬로바키아어슬로베니아어신할라어아랍어아르메니아어아이슬란드어아이티프랑스말아일랜드어아제르바이잔어아프리칸스어알바니아어에스토니아어에스페란토말영어요루바어우르두어우즈베크어우크라이나어웨일즈어이그보어이디시어이탈리아어인도네시아어일본어자바어줄루어중국어(간체)중국어(번체)체와어체코어카자흐어카탈로니아어칸나다어칸나다어크로아티아어타갈로그어타밀어타직어태국어터키어텔루구어펀자브어페르시아어포르투갈어폴란드어프랑스어핀란드어하우사어한국어헝가리어히브리어힌디어
    갈리시아어구자라트어그루지야어그리스어네덜란드어네팔어노르웨이어덴마크어독일어라오어라트비아어라틴어러시아어루마니아어리투아니아어마라티어마오리어마케도니아어말레이어말라가시어말라얄람어몰타어몽골어몽어바스크어버마어베트남어벨로루시어벵골의보스니아어불가리아어세르비아어세부아노세소토어소말리아어순다어스와힐리어스웨덴어스페인어슬로바키아어슬로베니아어신할라어아랍어아르메니아어아이슬란드어아이티프랑스말아일랜드어아제르바이잔어아프리칸스어알바니아어에스토니아어에스페란토말영어요루바어우르두어우즈베크어우크라이나어웨일즈어이그보어이디시어이탈리아어인도네시아어일본어자바어줄루어중국어(간체)중국어(번체)체와어체코어카자흐어카탈로니아어칸나다어칸나다어크로아티아어타갈로그어타밀어타직어태국어터키어텔루구어펀자브어페르시아어포르투갈어폴란드어프랑스어핀란드어하우사어한국어헝가리어히브리어힌디어
    음성 기능은 200자로 제한됨
  • 인류의희망 2017.11.10 00:41

    감사합니다^^

  • 고음l 2017.11.16 21:37

    감사합니다 덕분에 작성이 훨 쉬워졌어요

  • TigerJ 2017.12.17 17:19

    잘 배우고 갑니다

  • 음파리호호 2017.12.20 00:09

    감사합니다

  • 오딩 2017.12.20 22:35

    좋은 내용 감사합니다.

  • sky023 2018.01.12 02:23

    감사합니다.

  • HwonRaam 2018.01.17 10:30

    잘 배웠습니다. 감사합니다.

  • 아이응 2018.02.06 16:26

    꿀팁 감사합니다

  • 어뢰 2018.02.22 01:49
    감사합니다
  • 태평양앞바다고래 2018.02.25 14:43

    잘 못 알고 쓰던게 많았네요. 많이 배우고 갑니다~ 감사합니닷!!

  • zndkdk 2018.06.04 16:17

    좋은 정보 감사합니다.

  • Rasik 2018.06.20 10:40

    요론건 비교적 쉽네요 ㅎㅎㅎ감사합니다.

  • 웹큐 2018.06.22 13:14

    와우 쉽게 볼수있네요 감사합니다.

  • 매크로부탁좀 2018.06.23 08:46

    감사합니다 잘보고갑니다

  • MaMu 2018.07.03 14:36

    감사합니다~ 참고가 되었습니다.

  • 데몬A 2018.07.31 21:00

    좋은 정보 감사합니다.

  • 눈이 2018.08.08 10:22

    좋은 팁 고맙습니다.


전체 최신 인기글

전체 주간 인기글