원본 블로그 글 : http://knowledgeisfree.tistory.com/109
개발자는 깔끔하고 일관성있는 코드를 작성하는것이 중요합니다
규모가 큰 프로젝트를 진행중이라면 더욱 중요하죠, 코드의 상태가 프로그램의 유지보수에 많은 영향을 끼치기 때문에요
그래서 제가 코드를 최적화하기 위해 사용했던,하고있는 방법 몇가지를 소개하고자 합니다
많은 분들이 영감을 얻었으면 좋겠어요. 시작하겠습니다
변수에 값을 저장할때, 일반적으로는 아래처럼 코드를 작성합니다
이름 := "예지력"
성별 := "남성"
거주지 := "서울"
변수의 종류가 적은 경우, 위 처럼 작성해도 코드가 크게 길어지진 않지만
변수의 종류가 많은 경우에는 저장할때마다 다음줄로 넘겨주니 코드가 길어지죠
그런데 알고 계셨나요?
변수는 콤마(,)로 넘기면서 저장할 수 있습니다
이름 := "예지력", 성별 := "남성", 거주지 := "서울"
함수의 경우도 마찬가지입니다
이는 깔끔한 코드를 유지할 수 있는것 뿐만 아니라 코드의 속도를 약 35% 높여줍니다
02. 비슷한 변수끼리는 오브젝트로 저장해두기
변수를 많이 사용하는 경우, 가끔 변수끼리 헷갈려 잘못 사용하거나 이름을 까먹는 경우가 있죠
비슷한 종류의 변수끼리는 함께 묶고싶은 경우도 있고요
이름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.거주지
Send, a
Send, b
Send, c
명령어...
Send, a
Send, b
Send, c
명령어...
위 코드에서 Send 부분이 반복적으로 사용되는걸 확인할 수 있습니다. 중복되는 부분은 함수로 묶어서 코드의 일관성을 높여보세요
명령어...
SendFunc()
명령어...
SendFunc()
명령어...
SendFunc()
{
Send, a
Send, b
Send, c
}
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 압축을 품, 항상 덮어씌움
감사합니다.