[잡생각] 코딩 스타일에 대한 잡생각들

2016. 2. 23. 00:31엘키스공간/독백

728x90
728x90

요즘 코딩하며 느끼는 것은 코딩 스타일은 참으로 천차만별이라는 것이다.

자신만의 스타일을 유지하는 것은 중요한 것 같다.

자연스럽게 회사 코드에 섞이는 것 같긴하지만... ㅋ_ㅋ

 

1. Braces

K&R이냐 BSD냐 그것이 문제로다.

BSD는 Allman 스타일이라고도 한단다.

 

1
2
3
4
5
6
7
8
9
10
11
12
//K&R
Some {
    ...
}
 
//이냐
 
//BSD
Some
{
    ...
}
cs

 

 

원래 BSD를 아주 세차게 고집했던 나지만.. 회사 코드에 녹아들어 K&R도 자주 사용한다.

우리 회사 코드는 조금 일반화 시키면

클래스, 함수의 느낌을 풍기는 녀석들은 K&R을 쓴다.

반복문, 조건문은 대부분 BSD 방식으로 되어있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class someClass
{
    ...
public
    void SomeFunction();
    ...
}
 
void someClass::SomeFunction()
{
    if (m_koko == LOVELY_GIRL) {
        ...
        for ( ... ) {
            ...
        }
    }
}
cs

 

대강 이런 느낌이랄까.. 나도 요새 이 스타일을 따라가고 있는 것 같다.

 

2. if(someFlag == true) vs if(someFlag)

1
2
3
4
5
6
7
if(someFlag == true) {
    ...
}
 
if(someFlag) {
    ...
}
cs

 

가독성이 어떤게 좋은가? 나는 입사하기 전까진 전자를 사용했었다.

명확성은 전자가 좋다고 생각한다. 확실히 무슨 값인지 비교할 수 있는 것이다.

하지만 후자처럼 사용하는 코드도 굉장히 많고 나름 익숙해지니 꽤 괜찮다.

 

특히 C++이 아닌 Lua를 하며 

1
2
3
if someValue then
    ...
end
cs

 

이 if문에 매우 익숙해졌다고나 할까..

특히 괄호가 없는 언어를 하다보면 자연스럽게 "만약 썸벨류가 있다면?"의 느낌으로 해석하며 사용하게 된다.

그래서 C++에서도 자연스럽게 "이 플래그라면?", "이 포인터가 있다면?"의 느낌으로..

기존에는 이런 비교연산자가 없는 코드를 보면 "이 플래그가 참인가? 거짓인가?", "이 포인터가 널인가 널이 아닌가?"

무려 뒤에 6글자 내외로 빠진 것이기 때문에 내 뇌에선 엄청난 속도 향상이 일어난 것이다.

 

물론... 방망이!!!!!! 이 놈에 방망이가 들어가면 매우 헷갈리는 코드가 된다.

그것은 피할 수 없는 숙명. 그래도 "이 플래그가 아니라면?"과 "이 포인터가 없으면?"으로 떼우고 있다! :)

 

그리고.. 좀 내용과 안 맞을 수 있지만 전반적인 UI가 루아 소스로 되어 있는데

이렇게 특정 플래그에 레이블을 안 보이게 하는 코드를 짰었다.

1
2
3
4
5
6
7
8
9
if isFlag == TRUE then
    label1:Enable(TRUE)
    label2:Enable(TRUE)
    label3:Enable(TRUE)
elseif
    label1:Enable(FALSE)    
    label2:Enable(FALSE)
    label3:Enable(FALSE)
end
cs

 

나를 갈구면서(?) 잘 챙겨주는 회사 형이 딱 코드를 보더니

이렇게 수정해서 커밋했다.so simple!

 

1
2
3
label1:Enable(isFlag)
label2:Enable(isFlag)
label3:Enable(isFlag)
cs

 

"플레그면? 출력."

 

3. Indent 줄이기

1
2
3
4
5
if (someCondition) {
    if (!somePointer && somePointer.powerCoco != COCO) {
        return;
    }
}
cs
 
처음 회사에서 맡은 업무에서 코드를 짰는데 위의 코드처럼 짰었다.
정확히 기억은 안 나지만 조건이랑 밑에 문장을 합치기엔 좀 애매했던 뭐 그런 코드!
옆에 나를 잘 챙겨주는 회사 형에게 리뷰를 받았을 때 들었던 이야기다.
"민혁씨 최대한 인덴트를 줄이는 방향으로 코드 짜는게 좋아요. 포인터 널일때 리턴하고 if문 안쪽 수행하면 되요."
처음엔 무슨 말인지 잘 몰랐다.. 여기서 일단 나의 무지함에 문화컬쳐를 한번 맞이하고...
여튼 이.. 이런 인덴트까지 신경쓰다니!!! 마음을 추스르고 코드를 수정했다.

1
2
3
4
5
6
7
if (!someCondition) {
    return;
}
 
if (!somePointer && somePointer.powerCoco != COCO) {
    return;
}
cs

 

적당히 이런 느낌으로...

 

여튼 어떤 코드든 돌아가기만 하면 된다!

하지만 나도 이런것까지 고려할 수 있는 안목이 있었으면 한다.

간만에 구글 코딩 스타일을 주섬주섬.

 

728x90
반응형