리그오브레전드라는 게임이 있습니다.

 

리그오브레전드는 100개 넘는 챔피언들 중 1개를 픽하여 5:5 으로 소환사의 협곡에서 치열하게 싸우는 그런 게임입니다.

 

소환사챔피언이라고 불리우는 챔피언들이 공통적으로 사용할 수 있는 스킬이 있습니다.

 

그 스킬을 보통 스펠이라고 부릅니다.

 

보통 이 스팰은 D키와 F키에 할당하여 사용하게 됩니다.

 

그 스킬중에 모든 소환사들 99프로가 다 쓰는 스킬이 있습니다.

 

점멸스킬입니다.

 

점멸 스킬은 순간적으로 순간이동을 하는 스킬입니다.

 

딱 한번 스킬을 시전할 수 있으며 300초간의 쿨타임을 가지게 됩니다.

 

이 점멸 스킬을 잘써서 상대를 죽이기도하고, 본인이 죽을 뻔한 위기를 피하기도 합니다. 

 

6381a70ffc1dca4fc9e38bdb3e70dc72.webp

 

이 점멸스킬을 보통 D나 F키에 할당하여 사용하게 됩니다. 

 

그래서 나타나게된 리그오브레전드의 논란...

 

D점멸이냐 F점멸이냐 ( https://www.insight.co.kr/news/286619 )

 

롤에서는 이 문제를 서로간의 취향차이라고 보고 있습니다. (다만 f점멸이 승율이 약간 더 높은게 함정)

 

이와 거의 비슷하지만 그렇지 않은 것이 코딩에도 한 가지 있습니다.

 

바로 코딩 컨벤션중에 아래와 같은 항목입니다.

 

1.

if ($foo == 'bar') {

}

 

2.

if ($foo == 'bar')

{

}

 

위의 숫자를 가르켜 1번과 2번으로 칭하도록 하겠습니다.

 

1번과 2번은 보통 롤에서 F점멸이냐 D점멸이냐 이야기 나오는 것 처럼 서로간의 취향차이인 부분이 있지만, 전 그렇지 않은 부분도 있다고 생각합니다.

 

현업에서 실제로 종사하고 제가 생각하기에 훌륭한 프로그래머라고 생각하거나 존경하는 프로그래머들은 대부분 2번의 방식을 고수하고 사용하고 있습니다.

 

왜 그런가 여러가지 생각을 해봤는데, 일반적으로 우리의 눈은 대칭을 정말 잘 찾습니다.

 

닫혀진 항목이 어디에서 열려있는지 한눈에 대칭의 구조로 찾기가 쉽습니다.

 

물론 대부분의 IDE에서는 갈호들을 찾아주기도 합니다. 

 

다만 바로 if의 i의 바로 아래에 있는곳에 열어주게되면 닫히는 항목도 똑같은 위치에서 닫히게 됩니다.

 

https://github.com/rhymix/rhymix/blob/master/modules/member/member.controller.php#L75

 

라이믹스에서 if가 복잡하게 읽혀져 있는 항목입니다.

 

해당 링크의 코드들을 보면 아래 끝나는 } 닫히는 중괄호를 찾게되면 처음 시작하는 부분이 같은 포지션의 위에서 똑같이 열려 있기 때문에 어느 if문의 중갈호가 시작되는지 파악하기가 일반적으로 더 쉽습니다.

 

이를 만약 1번 방식으로 하게되면 다음과 같습니다.

 

2번 방식으로 하면.png

 

실제로 17번째줄에 닫힌 중갈호를 찾으면 7번째줄에 시작점 끝에서 찾아야 하므로 순서가 뒤죽박죽이고 코드들이 오밀조밀 라인수의 합쳐서 보여지게 됩니다.

 

dd2.png

2번 방식으로 하면 실제로 보여지는 코드이 분리되어 확실하게 구분되기에 if문의 시작점이라던지 변수가 어디에 잘 선언되어있는지 시각적으로 나뉘어서 확실하게 보기가 편해집니다.

 

보통 1번 진영을 쓰는 사람들이 많이 말씀하시는 것 중 하나가 코드들이 오밀조밀 모이게 되므로 모니터속에 한눈에 보이는 코드들이 많다고 이야기 합니다.

 

하지만, 지금은 옛날이 아니지요. 

 

옛날에야 800x600, 640x480 과 같은 아주 낮은 모니터에서 코딩을 하였기 때문에 코드들을 한눈에 보기가 어려웠지만, 현재는 720p이상급이며 모니터에서 보여지는 라인들의 수가 예전보다 훨신 많아진 상황이기에 한눈에 많이 보인다는 이야기가 옛날이야기가 되는거죠.

 

요즘은 2번처럼 해도 많이 보여지고, 확실하게 코드들을 나뉘어서 보여지는 것이 오히려 더 좋은 세상이 왔습니다.

 

라이믹스팀은 2번방식을 고집하고 있습니다.

 

XE팀에서도 2번방식을 고집하였지만, 이번에 XE3을 넘어가시면서 PSR-2 https://www.php-fig.org/psr/psr-2/ 코딩스타일을 넘어갔습니다.

 

PSR-2 코딩스타일은 1번 방식을 선호합니다.

 

2번에 익숙했던 개발자분들이 지금은 좀 불편하다고 생각하시지 않을까 생각이 들긴하네요.ㅎ

 

여러분들은 1번인가요 2번인가요?

 

회사에서 코딩스탠다드로 1번을 사용할 수 밖에 없는 상황이 아닌 개인프로젝트나 좀 더 선호하시는 방향이 1번이시라면 혹시 다른 이유가 있는지, 이 글을 보고 2번으로 한번 해보실 의향이 있으신지 궁금합니다.

 

의견이 많이 오가면 좋을 것 같네요 :)

 

메리크리스마스!

  • profile
    저도 같은 이유에서 2번을 무조건 사용하는데요. 줄수가 줄어서 그런지 코딩좀 하나싶으면 1번으로 되어있는 경우가 많더라구요. 고수들은 1번도 잘 보이시는건가요?ㅠㅠ
  • profile profile
    고수라는 기준이 어떤지 모르겠지만 프로그래밍 잘하시는 분들 제가 존경하시는 분들도 1번으로 해야할때 1번으로 잘 하시고 구분 잘하십니다.

    경험차이죠 뭐 ㅎㅎ
  • profile profile
    저는 아무래도 초보이다보니 1번으로하면 2번으로 고쳐가며 봐서요 ㅋㅋㅋ 빨리 늘었으면 좋겠네요
  • profile
    저도 2번에 한표입니다.
    1번으로 되어 있으면 2번으로 고쳐가며 보고 있습니다. ^^*
  • profile

    해당 언어 컨벤션 따라서 하는데, 자바 사용할땐 1번. 지금은 C#을 사용하고 있어서 2번으로 하고 있습니다. PHP는 안쓴지 너무 오래돼서 어떻게 썼었는지 기억이 안나네요. 표준 문서에 있는대로 코딩하지 않을까 싶습니다.(확인해보니 php.net에는 1번으로 돼 있군요)

  • profile

    저는 1번을 선호합니다만 2번 쓰는데는 그렇게 맞춰주는데 불편함은 없습니다. 1번이 가독성이 조금 더 낫죠. 줄이 불필요하게 늘어나면 한눈에 코드가 들어오는데 좋은 것은 아니니까요.

    2번은 균형이 더 맞아보이죠. 미학적인 면에도 무시할수 없으니 균형도 중요하죠. 보기좋은 떡이 먹기도 좋다고...

     

    그런데 1번을 쓰더라도

    } else if ($foo == 'bar') {

    이렇게 한줄로 되는 것 보다는 

    } 
    else if ($foo == 'bar') {

    이렇게 하는 것이 더 나아보이더군요. 

  • profile profile
    else if ... else if ... else 식으로 점점 늘어나면 첫 줄의 if와 줄이 안 맞는 것도 거슬리죠.

    닫는 중괄호와 else를 한 줄에 쓰게 되면 주석 넣을 자리가 애매하게 된다는 것도 은근 심각한 단점입니다. 예전에 XE에서 1번과 2번 방식을 섞어쓰던 시절에는 else 부분을 설명하는 주석이 if 부분의 괄호를 닫기 직전에 들어가는 경우도 많았습니다. 나중에 그 코드를 보는 입장에서는 마치 거기에 코드가 있었다가 주석만 남기고 삭제된 듯한 인상을 주지요.

    1번이나 2번 중 어느 한쪽의 가독성이 더 좋다고 주장하는 것은 100% 개인의 취향이며 판단의 대상이 아닙니다. 그러나 이렇게 논리적인 구조를 헷갈리게 만드는 스타일은 쉴드의 여지가 없다고 생각합니다.
  • profile
    좋은글 감사합니다.
    하지만 오타가... '갈호'가 아니고 '괄호'입니다.
  • profile profile
    네 알아요.

    그냥 버릇때문에 갈호라고 적은거 있는데 무의식중에 넘어갔네요.

    찾아보면 재대로 친거도 있어요 -0-;
  • profile

    PSR-2는 PSR-12로 대체되었습니다.

     

    사실 이 부분은 PSR-2나 PSR-12나 마찬가지인데... if문의 중괄호는 옆에다가 쓰라고 하고, class나 function의 중괄호는 아랫줄에 쓰라고 하고, 그런데 또 클로져는 옆에 쓰라고 하고, 일반 함수라도 파라미터 목록이 길어서 아랫줄로 넘어가면 옆에 쓰라고 합니다. 일관성이 하나도 없어요. PSR 팀 멤버들이 각 항목에 대해 투표해서 많이 나온 쪽으로 결정했기 때문에, 항목별로 55:45냐 45:55냐에 따라 제멋대로일 겁니다. 그래놓고는 지들이 뭐 잘났다고 온통 다 "MUST"로 도배를 해놨어요. 이걸 가지고 옳다 그르다 싸우는 것은 시간낭비라고 생각합니다.

     

    라이믹스처럼 공개적으로 개발되는 프로젝트의 입장에서는 가독성 같은 개인적 취향보다는 불필요한 diff 때문에 변경이력을 추적하기 어려워지는 것을 피하는 것이 더 우선순위입니다. 따라서 XE에서 물려받은 코딩 스타일을 대부분 그대로 유지하고 있습니다. 딱히 그게 더 좋거나 해서 유지하는 것이 아닙니다. 아주 오래 전에 작성된 코드 중 XE 코딩 스타일에 어긋나는 것도 딱히 그 부분을 수정할 필요가 없다면 그냥 둡니다. 하나의 파일 안에 2가지 서로 다른 줄바꿈 문자(CRLF, LF)가 섞여있는 경우에만 어쩔 수 없이 정리하게 됩니다.

     

    그래도 현실적으로 라이믹스 코딩 규칙PSR-12와 크게 어긋나는 부분은 1) 모든 중괄호는 아랫줄에, 2) 들여쓰기는 탭으로, 이렇게 2가지뿐인 것 같습니다. 들여쓰기를 바꾸면 어마어마한 양의 diff가 발생할 텐데, 솔직히 이것도 일관성있게 적용되어 있지 않습니다. 최근에 나오는 대부분의 에디터는 스페이스가 기본값이기 때문에, 여러 사람이 코드를 만지다 보면 스페이스가 섞이곤 합니다. 특히 XML 쿼리 파일이 그렇습니다. 이것도 굳이 대세에 저항하기보다 그냥 새 파일에는 스페이스를 써도 되지 않을까 생각중입니다.

  • profile profile
    요즘은 스페이스바가 대세이긴 하더군요..

    근데 탭으로 짜여진 코드들이 많은상황에서 스페이스바로 바꾸게 된다면 또 에디터 설정에서 탭 스페이스 혼돈 하여 서로 썩이게 되겠더라구요 ㅠㅠ..

    한번에 넘길꺼면 모든 파일들을 대대적으로 고치는 작업을 하지 않는다면 힘들지 않을까 생각이 드네요..ㅋㅋ
  • profile profile

    탭 키를 누르면 스페이스 2~4개가 자동으로 입력되는 것이 대세지요. 쓰는 사람 입장에서는 똑같습니다. ㅎㅎ

     

    그래도 기본값이 다른 프로젝트나 언어들이 있기 때문에 .editorconfig를 사용하여 폴더별로 공백 문자의 타입과 갯수 등을 지정할 수 있는 건데... 주요 에디터들 중 이 기능을 기본지원하는 것이 거의 없죠. 플러그인을 찾아서 설치해야 하니 대부분의 사람들은 혜택을 보지 못합니다.

     

    다행히 라이믹스에서 사용하는 PHP, JS, CSS 같은 언어들은 파이썬처럼 공백 문자에 민감하게 반응하지 않아서 좀 섞어쓰더라도 미관상 이상할 뿐, 기능에 문제가 되지는 않아요.^^

  • profile
    저는 보통은 2번 방식을 사용하는데, else문 같은 경우는 한줄에 쓰는게 더 예뻐보여서 1번 방식을 같이 사용합니다

    if (a==0)
    {
    // a가 0일때
    } else {
    // a가 0이 아닐때
    }

    최근에 클린 코드라는 책을 읽고서 그 스타일대로 적용해보려고 노력하고 있는데, 습관이란게 쉽게 바뀌진 않더라고요 ㅎㅎ;
  • profile profile
    책에 있는 항목을 그대로 따르기보단 본인이 가지고 잇는 원칙이 있으면 그 원칙을 그대로 밀고 나가시는게 좋습니다.

    다만, 2번 방식대로 쓸거면 모든 항목에 2번 항목을.. 1번 항목을 쓸꺼면 모든 항목을 1번을 쓰는게 좋다 생각해요.

    일관성이 없는 PSR-2와 비슷해 보여요..ㅋㅋ