요즘 T-IS 2.00 Release 한다고 자는 일 외에는 모든 시간을 코딩에 올인넣고 있다.
밥먹으면서 머리로 코드생각하고, 학교가서도 코딩하고 있으니..
실제로 자는 시간외에는 코딩에 올인한다고 봐야하겠다.
이렇게 지낸지도 벌써 3주나 되버렸다.
처음 생각할땐 모든 시간을 올인넣으면 한 2주면 될거라 예상했는데..
이게 생각처럼 만만치가 않다.
T-IS 2.00의 메인엔진은 설정 컨트롤 다이얼로그에 있다.
저 다이얼로그 하나에 모든 기능이 생성이 되기 때문이다.
그러다보니 자연히 일반적인 스크립트보다 덩치가 불어나게 되어있고
덩치가 불어난다는건 곧바로 시스템에 영향을 미치게 된다는 공식이 성립이 된다.
따라서 코드 한줄을 작성하더라도 그 효율성을 따지지 않으면 안된다.
mIRC 특성상 실행될때 등록되어 있는 모든 스크립트를 메모리에 로드하는 방식이기 때문에
최대한 필요없는 코드는 줄이고, 굳이 로드되지 않아도 되는 부분은 따로 빼버려야 됐다.
물론 전체적인 속도면에 대해서는 아무래도 메모리에 선로드 후실행인 Static 방식보다는
아주 약간 느려질 수 있지만 사람이 체감할 정도로 느려질만큼 비만 코드가 되진 않을 것이니
이 부분에 대해서는 어느정도 감수하고 코딩하고 있다.
어짜피 사람이 체감하기 힘들정도의 스피드차감이라면 차라리 메모리를 택하리라...
어찌되었든간 다이얼로그 방식을 채택했기 때문에 스크립트 덩치가 커졌으니
사소한 if문 하나에도 어떻게 사용해야 효율적인지 여부를 따지지 않을 수가 없다.
무슨 말이냐고?
간단한 예제를 한번 보자.
Sample_01 :
Sample_02 :
자 이 2개의 코드를 한번 비교해보자.
얼핏보기에 둘의 코드는 전혀 차이가 없을 것 같다.
물론 두개의 코드는 실행했을 때 같은 결과를 리턴해준다.
그럼 무엇이 다른가?
바로 동작방식의 차이다.
두개의 코드 모두 실행되었을때 foo와 foo2가 널이 아닌경우에 다음 루틴이 실행된다.
첫번째 코드와 두번째 코드 모두 먼저 foo의 값을 비교하는데 그 값이 A와 일치하는지를 판단한다.
그리고 만약 foo가 A와 일치하면 foo2를 비교하고 참이면 foo2 is 10!!을 출력하며,
foo2가 거짓이면 foo2 isn't 10!!을 출력한다.
여기까지는 두개의 코드 모두 같은 루틴을 가진다.
문제는 출력해준뒤의 조건이다.
두개의 코드 모두 echo로 출력을 해주는 코드는 있지만 실행을 끊어주는 코드가 없다.
그럼 어떻게 되는가?
출력을 해준뒤에도 다음 코드를 계속 실행하는 것이다.
자 이제 A와 비교하는 조건문이 끝났으니 실행을 계속 진행해야된다.
이 부분에서 첫번째 코드와 두번째 코드의 다른점이 생긴다.
첫번째 코드의 경우 4개의 조건문이 모두 if로 이루어져 있다.
이것은 순서대로 모든 조건문을 계속 체크해보게 되는 결과를 가져온다.
처음 if 조건문에서 foo가 A와 일치했다고 가정해보자.
그럼 화면에는 "foo2 is 10!!" 혹은 "foo2 isn't 10!!"이 출력되었을 것이다.
위에서 모든 조건문을 체크한다고 했으니 그 다음 순서는 foo가 B와 일치하는지 확인할 것이고,
또 그 뒤에는 foo가 C와 일치하는지를 확인할 것이다. 마지막엔 모두 해당되지 않는지 체크하여
모두 총 4번의 조건문을 실행하게 된다.
그러나 두번째 코드의 경우 4개의 조건문이 모두 if가 아니라 중간에 elseif가 사용되었다.
이것은 어떻게 작동을 하느냐.
진행되는 elseif 블럭의 맨처음 if를 조건으로 가져오게 된다.
이 코드 또한 처음 if 조건문에서 foo가 A와 일치 했다고 가정해보자.
물론 첫번째 코드와 동일하게 화면에는 "foo2 is 10!!" 혹은 "foo2 isn't 10!!"이 출력될 것이다.
그 다음은 어디로 갈 것인가?
바로 세번째 조건문인 foo == C 조건문으로 가게 된다.
왜냐하면 처음 조건문인 foo == A에서 그 결과가 True가 되었기 때문에
elseif 즉, 거짓이며 이 조건과 맞을 경우에 라는 코드가 사용된 foo == B 조건문은 건너뛰게 되는것이다.
그럼 총 3번의 조건문만 실행하면 되는 것이다.
이처럼 이 조건을 반드시 실행해야 되는 경우에는 if를 사용하고,
중복된 조건의 결과값의 경우이며 또다른 조건이 있는 경우에는 elseif를 사용하는것이 좋다.
위 코드처럼 몇개 안되는 조건의 경우라면 어떻게 쓰던 그것은 상관이 없는 얘기가 되지만
만약 수백~수만개의 조건을 체크해야 되는 경우에는
모두 체크하는것과 일부를 제외하고 체크하는것에는 그 차이가 크게 생긴다.
한마디로 똑같은 작업을 할 경우라면 좀더 최적화된 코드를 작성한다고 생각하면 된다.
대중교통 수단을 이용하는 경우에 "지하철카드와 버스카드"를 가지고 있는 것과
"둘다 사용가능한 카드"를 가지고 있는것의 차이가 있는것처럼 말이다.
비교대상이 약간 부적절한 관계이지만 어찌되었든 중요한건 두개의 조건 모두 대중교통을 이용한다는것이다.
어짜피 이용해야되는 대중교통이라면 한장의 카드만 가지고 다니는게 낫지 않겠나?
즉, 결과가 같을 경우엔 좀더 빠르고 편한 방법이 좋다는 것이다.
오랜만에 주저리주저리 한번 써봤다
밥먹으면서 머리로 코드생각하고, 학교가서도 코딩하고 있으니..
실제로 자는 시간외에는 코딩에 올인한다고 봐야하겠다.
이렇게 지낸지도 벌써 3주나 되버렸다.
처음 생각할땐 모든 시간을 올인넣으면 한 2주면 될거라 예상했는데..
이게 생각처럼 만만치가 않다.
T-IS 2.00의 메인엔진은 설정 컨트롤 다이얼로그에 있다.
저 다이얼로그 하나에 모든 기능이 생성이 되기 때문이다.
그러다보니 자연히 일반적인 스크립트보다 덩치가 불어나게 되어있고
덩치가 불어난다는건 곧바로 시스템에 영향을 미치게 된다는 공식이 성립이 된다.
따라서 코드 한줄을 작성하더라도 그 효율성을 따지지 않으면 안된다.
mIRC 특성상 실행될때 등록되어 있는 모든 스크립트를 메모리에 로드하는 방식이기 때문에
최대한 필요없는 코드는 줄이고, 굳이 로드되지 않아도 되는 부분은 따로 빼버려야 됐다.
물론 전체적인 속도면에 대해서는 아무래도 메모리에 선로드 후실행인 Static 방식보다는
아주 약간 느려질 수 있지만 사람이 체감할 정도로 느려질만큼 비만 코드가 되진 않을 것이니
이 부분에 대해서는 어느정도 감수하고 코딩하고 있다.
어짜피 사람이 체감하기 힘들정도의 스피드차감이라면 차라리 메모리를 택하리라...
어찌되었든간 다이얼로그 방식을 채택했기 때문에 스크립트 덩치가 커졌으니
사소한 if문 하나에도 어떻게 사용해야 효율적인지 여부를 따지지 않을 수가 없다.
무슨 말이냐고?
간단한 예제를 한번 보자.
Sample_01 :
if ($foo != $null) && ($foo2 != $null) {
if ($foo == A) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == B) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == C) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo != A) && ($foo != B) && ($foo != C) {
echo Not match all!
}
} else {
echo Error!!!! Data is not! (foo or foo2)
}
if ($foo == A) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == B) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == C) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo != A) && ($foo != B) && ($foo != C) {
echo Not match all!
}
} else {
echo Error!!!! Data is not! (foo or foo2)
}
Sample_02 :
if ($foo != $null) && ($foo2 != $null) {
if ($foo == A) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
elseif ($foo == B) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == C) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo != A) && ($foo != B) && ($foo != C) {
echo Not match all!
}
} else {
echo Error!!!! Data is not! (foo or foo2)
}
if ($foo == A) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
elseif ($foo == B) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo == C) {
if ($foo2 == 10) {
echo foo2 is 10!!
} else {
echo foo2 isn't 10!!
}
}
if ($foo != A) && ($foo != B) && ($foo != C) {
echo Not match all!
}
} else {
echo Error!!!! Data is not! (foo or foo2)
}
자 이 2개의 코드를 한번 비교해보자.
얼핏보기에 둘의 코드는 전혀 차이가 없을 것 같다.
물론 두개의 코드는 실행했을 때 같은 결과를 리턴해준다.
그럼 무엇이 다른가?
바로 동작방식의 차이다.
두개의 코드 모두 실행되었을때 foo와 foo2가 널이 아닌경우에 다음 루틴이 실행된다.
첫번째 코드와 두번째 코드 모두 먼저 foo의 값을 비교하는데 그 값이 A와 일치하는지를 판단한다.
그리고 만약 foo가 A와 일치하면 foo2를 비교하고 참이면 foo2 is 10!!을 출력하며,
foo2가 거짓이면 foo2 isn't 10!!을 출력한다.
여기까지는 두개의 코드 모두 같은 루틴을 가진다.
문제는 출력해준뒤의 조건이다.
두개의 코드 모두 echo로 출력을 해주는 코드는 있지만 실행을 끊어주는 코드가 없다.
그럼 어떻게 되는가?
출력을 해준뒤에도 다음 코드를 계속 실행하는 것이다.
자 이제 A와 비교하는 조건문이 끝났으니 실행을 계속 진행해야된다.
이 부분에서 첫번째 코드와 두번째 코드의 다른점이 생긴다.
첫번째 코드의 경우 4개의 조건문이 모두 if로 이루어져 있다.
이것은 순서대로 모든 조건문을 계속 체크해보게 되는 결과를 가져온다.
처음 if 조건문에서 foo가 A와 일치했다고 가정해보자.
그럼 화면에는 "foo2 is 10!!" 혹은 "foo2 isn't 10!!"이 출력되었을 것이다.
위에서 모든 조건문을 체크한다고 했으니 그 다음 순서는 foo가 B와 일치하는지 확인할 것이고,
또 그 뒤에는 foo가 C와 일치하는지를 확인할 것이다. 마지막엔 모두 해당되지 않는지 체크하여
모두 총 4번의 조건문을 실행하게 된다.
그러나 두번째 코드의 경우 4개의 조건문이 모두 if가 아니라 중간에 elseif가 사용되었다.
이것은 어떻게 작동을 하느냐.
진행되는 elseif 블럭의 맨처음 if를 조건으로 가져오게 된다.
이 코드 또한 처음 if 조건문에서 foo가 A와 일치 했다고 가정해보자.
물론 첫번째 코드와 동일하게 화면에는 "foo2 is 10!!" 혹은 "foo2 isn't 10!!"이 출력될 것이다.
그 다음은 어디로 갈 것인가?
바로 세번째 조건문인 foo == C 조건문으로 가게 된다.
왜냐하면 처음 조건문인 foo == A에서 그 결과가 True가 되었기 때문에
elseif 즉, 거짓이며 이 조건과 맞을 경우에 라는 코드가 사용된 foo == B 조건문은 건너뛰게 되는것이다.
그럼 총 3번의 조건문만 실행하면 되는 것이다.
이처럼 이 조건을 반드시 실행해야 되는 경우에는 if를 사용하고,
중복된 조건의 결과값의 경우이며 또다른 조건이 있는 경우에는 elseif를 사용하는것이 좋다.
위 코드처럼 몇개 안되는 조건의 경우라면 어떻게 쓰던 그것은 상관이 없는 얘기가 되지만
만약 수백~수만개의 조건을 체크해야 되는 경우에는
모두 체크하는것과 일부를 제외하고 체크하는것에는 그 차이가 크게 생긴다.
한마디로 똑같은 작업을 할 경우라면 좀더 최적화된 코드를 작성한다고 생각하면 된다.
대중교통 수단을 이용하는 경우에 "지하철카드와 버스카드"를 가지고 있는 것과
"둘다 사용가능한 카드"를 가지고 있는것의 차이가 있는것처럼 말이다.
비교대상이 약간 부적절한 관계이지만 어찌되었든 중요한건 두개의 조건 모두 대중교통을 이용한다는것이다.
어짜피 이용해야되는 대중교통이라면 한장의 카드만 가지고 다니는게 낫지 않겠나?
즉, 결과가 같을 경우엔 좀더 빠르고 편한 방법이 좋다는 것이다.
오랜만에 주저리주저리 한번 써봤다



