'code'에 해당하는 글 2건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
조건문 안에 조건이 많으면 무척 복잡해 보일 때가 있습니다. 또한 가로줄이 너무 길어지게 되죠. 이러한 문제에 대해 여러 가지 해결책이 있을 것입니다. 그 중 하나는 복잡한 조건문을 아래와 같이 여러 줄에 나누어 쓰는 것입니다.
if (value != null &&
   (value == Type.ONE || value == Type.TWO) &&
   state == null) {
   ...
}
그런데 저는 위 코드를 별로 좋아하지 않습니다. 왜냐하면 가로줄은 줄었지만 여전히 지저분 해보이는 느낌이 들기 때문입니다. 그래서 저는 아래와 같은 코드를 더 좋아합니다.

예제1)
if (value != null && (value == Type.ONE || value == Type.TWO) && state == null) {
    ...
}

boolean logging;
logging = (value != null);
logging = logging && (value == Type.ONE || value == Type.TWO);
logging = logging && (state == null);

if (logging) {
   ...
}

예제2)
if (value == Type.ONE || value == Type.TWO || value == Type.THREE || value == Type.FOUR) {
    ...
}

boolean sending;
sending = (value == Type.ONE);
sending = sending || (value == Type.TWO);
sending = sending || (value == Type.THREE);
sending = sending || (value == Type.FOUR);

if (sending) {
    ...
}  

개인적으론 앞선 코드보다 예제1,2 의 코드가 더 깔끔하다고 생각됩니다. 이건 물론 개인적인 취향이겠지요.

하지만 위 코드만의 장점이 있습니다. 그 장점이란 불 변수의 이름을 통해 조건의 목적을 표현할 수 있다는 것입니다. 첫번째 예제를 보면 로깅을 할지 안 할지에 대해 결정하기 위한 조건이라는 것을 알 수 있고, 두번째 예제 역시 전송을 할지 안 할지에 대해 결정하기 위한 조건이라는 것을 쉽게 알 수 있습니다.

2008/02/13 ~ 2007/03/20

WRITTEN BY
차민창
르세상스 엔지니어가 사회를 이끌어나가는 상상을 하며!

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
최근 펄을 이용하여 프로젝트를 진행했습니다. 펄로 코딩을 하다보면 자바에서는 경험하지 못했던 몇가지 신선한 경험을 하게 됩니다. 이번 사건도 그 중 하나였던 것 같습니다.

제가 만든 펄 스크립트의 안정성을 위해 사용자가 입력한 내용을 한번 더 확인시켜줘야겠다는 생각이 들었습니다. 그래서 아래와 같이 코드를 만들었습니다. 사용자로부터 입력을 받아 Y나 y를 입력했을 경우에만 주실행로직을 수행하는 코드입니다.
print($sampleString."' 이 정말 맞습니까? (Y/N) ");
my $confirmation = <STDIN>;
chomp($confirmation);
if ($confirmation eq "Y" || $confirmation eq "y") {
    # 약 40줄 정도 되는 주요 처리 코드
   ...
   ...
   ...
}
# 코드의 끝
그런데 실제 코딩을 하고 나니 실행코드가 조건문 안에 들여쓰기 되어 갇혔다는 것을 발견했습니다. 그것도 40줄이나 말입니다 안정성을 향상 시키기 위해 들어간 선택적인 코드 때문에 이런 일이 발생 한 것은 다소 불합리해 보였습니다. 왠지 손님이 주인을 밀어내는 느낌이라고나 할까요?

거기에다가 제가 본 펄 강의에는 열악한 환경의 터미날을 이용할 때를 대비하여 코드의 가로길이가 80자를 넘어가지 않게하라고 강조했습니다. 80자가 넘어가면 코드를 보기가 힘들어지고 따라서 수정하기가 어려워진다고 하더군요. 들어쓰기는 가로길이를 늘어나게 하기 때문에 이러한 이유로도 제거되야 하는 것이 마땅해 보였습니다.

그래서 코드를 아래와 같이 수정했습니다.
print($sampleString."' 이 정말 맞습니까? (Y/N) ");
my $confirmation = <STDIN>;
chomp($confirmation);
exit if ($confirmation ne "Y" && $confirmation ne "y");

# 약 40줄 정도 되는 주요 처리 코드
...
...
...
# 코드의 끝
"$confirmation이 Y이거나 y이어야 함"을 "$confirmation이 Y가 아니고 y도 아닐 때"라는 부정조건으로 바꾸고 만약 해당 조건이 만족했을 때는 즉시 스크립트를 종료하도록 처리 한 것입니다.

이렇게 코드를 작성하니 40줄의 처리 코드는 조건문에서 빠져나올 수가 있었습니다. 그런데 가만히 보다보니 또 문제가 보였습니다. 그것은 새롭게 바뀐 조건식이 직관적이지 않다는 것입니다. 바뀐 조건식 'Y가 아니고 y도 아니어야 한다'라는 것은 처음에 있었던 "Y거나 y어야 함'보다 이해하기 어렵게 느껴졌습니다.

그래서 아래와 같이 한번 더 코드를 수정했습니다.
print($sampleString."' 이 정말 맞습니까? (Y/N) ");
my $inputFromUser = <STDIN>;
chomp($inputFromUser);
my $confirmation = $inputFromUser eq "Y" || $inputFromUser eq "y";
exit if ($confirmation == 0); #펄은 true/false 대신 1/0 개념이 사용 됨.

# 약 40줄 정도 되는 주요 처리 코드
...
...
...
# 코드의 끝
결국 이렇게 수정함으로 인해 직관적인 긍정조건을 사용 하면서도 40줄을 들여쓰기로부터 해방시킬 수 있었습니다. 소소하지만 재밌는 경험이였다고 생각합니다.

WRITTEN BY
차민창
르세상스 엔지니어가 사회를 이끌어나가는 상상을 하며!

,