코드 작성 시 무엇을 우선시할 것인가? 성능? 가독성? 유지보수성?

제가 개인적으로 개발하고 있는 프로젝트가 있습니다.
https://github.com/LeeKyoungIl/illuminati Project illuminati 인데요.
요즘은 gatekeeper라는 서브 프로젝트를 열심히 개발 중이죠.
https://github.com/LeeKyoungIl/illuminati/tree/feature/gatekeeper_new

이 서브 프로젝트를 개발 하면서 코드가 전반적으로 구조나 내용이 개선이 많이 되고 있는데요.

요즘 들어 작업을 계속하면서 생각하는 게 우리가 코드를 짤 때 무엇을 우선시 하며 짤 것인가?

  1. 성능
  2. 가독성
  3. 유지 보수성

3가지 다 중요합니다.

하지만 요즘처럼 하드웨어 파워가 좋은 시절은 1번은 정말 심하지 않은 경우 (막 loop 몇 개씩 중첩) 크게 상관이 없지 않을까 싶네요.

제가 요즘 개발을 하면서 (Java 기준으로) 생각하는 부분이 있는데 가령 Boolean 관련 조건문 처리에서

많은 분들이 이런 식으로 코드를 짜고 있습니다.

가장 단순 하지만 폰트에 따라 false 체크의 경우 앞에 ! 표가 잘 안 보일 때도 있고.. (노안이..) 실수를 할 수도 있는 여지가 있다고 생각해요.

그래서 저는 요즘 이런 코드를

이렇게 작성하고 있는데요.

당연히 Boolean 은 bool 의 레퍼 타입 이기 때문에 성능적으로 떨어지기야 하겠죠..

하지만 가독성은 월등히 높져? 그리고 솔직히 성능도 뭐 크게 차이 안 날 듯 합니다.

(그리고 소스 보면 public static final 임)

그래도 성능이 얼마나 차이가 날까? 하고 테스트를 해보았는데 결과는 아래와 같습니다.
(단순 for문 1억번 조건문 비교)

nanos 기준
if (a) : 4090656
if (a == Boolean.TRUE) : 6280227

ms 기준
if (a) : 3
if (a == Boolean.TRUE) : 5

그리고 다른 사람들 의견을 구글링을 해서 좀 찾아보았는데 글 중에 마음에 와 닿은 글이

정리를 하면 성능보다는 단순성, 가독성, 유지보수성이 무엇보다도 중요하다 라는 소리죠.

위에 제가 개인적으로 하는 프로젝트의 경우는 저 혼자 하는 것이라 어떤 방법으로 짜던 상관없지만… (오픈 소스이긴 해도)
우리가 업무적으로 협업을 할 때는 가독성이 최우선되어 유지보수가 쉬운 코드를 짜야하지 않을까요?

지옥에서 온 CTO 님 (제가 존경하는 형님이 그분을 그렇게 부르더라구요?) 이 예전에 페이스북에 남기신 글이 있는데 주석이 필요 없이 코드만 보고도 이해가 가능한 코드를 짜야한다.

저도 업무를 하면서 지난날을 돌이켜 보며 많이 반성을 하고 (동료들에게 미안…) 글고 저 말을 가슴에 새기며.. 개발을 해야겠습니다.

저는 아직 실력이 부족해서 이렇게 까지 코드를 가독성 있고 주석이 필요 없을 정도로 짤 능력이 안되지만 목표가 생겨서 즐겁네요.

 

ps. 해당 주제로 시니어 분과 대화결과 프리미티브 타입만으로도 boolean이라는 것이 전달이 잘 되는데 굳이 레퍼런스 타입을 사용할 필요가 없고 레퍼런스 타입이 가치가 있는 경우가 있는 부분이 있긴 한데 이런 부분에서는 사용하는건 좀 오버엔지니어링 것 같다는 의견을 주셨습니다. 곰곰히 생각해본 결과 시니어 님이 의견 주신대로 true 는 if (a) false 는 if (false == a) 이정도로 사용해도 충분히 가독성을 높일 수 있을꺼 같습니다. (정상혁님 의견 감사 드립니다.)

코드 작성 시 무엇을 우선시할 것인가? 성능? 가독성? 유지보수성?”에 대한 2개의 생각

  1. 최창현

    오래된 글이지만 우선 좋은 글에 감사드리며, 조심스레 글에 대한 제 의견 하나 댓글로 남겨봅니다.
    브라켓({})의 위치나 글에서 언급하신 조건문 작성 방법 등은 개발자마다 다 각양각색이긴 합니다. 다만 제가 생각하기엔 회사에 코딩 컨벤션이 있다면 그에 따라 작성하는 것이 제일 좋고요. 만약 없다면 프로젝트 총괄하는 리드 프로그래머의 코딩 스타일을 따르는 것이 좋을 것 같습니다.

    그리고 주석을 코드에 얼만큼 작성해야 하는 것도 개발자마다 기준이 다 다른 부분입니다. 제 경우도 주니어 개발자 시절에 클린 코드 같은 책을 보면서 글쓴분의 CTO님과 같은 생각을 했던 적이 있었고, 그렇게 작성하려고 노력했던 적도 있었습니다.
    그런데 몇년이 지난 후부터는 그때와는 생각이 좀 달라졌습니다. 주니어 시절 제가 주석 지양을 표방하면서 작성한 코드를 볼 일이 있었는데 행간 자체를 읽는데는 무리가 없었으나 어떤 의도로 이런 코드를 작성했는지까지는 파악하기 어려웠습니다. 더욱이 모국어가 영어가 아니기 때문에 빠르게 스크롤 해가면서 코드를 이해하는 것도 어려웠었구요.
    그렇게 제 스스로에게 몇번 당하고 나서 주석 기술에 대한 아래와 같이 저만의 주석 기술 기준이 생겼습니다.
    1.복잡한 로직의 코드인 경우 각 단계마다 간략하게 코멘트를 달것
    2.구현 내용중 문맥상 튀는 코드가 있는 경우 그 이유를 반드시 적을 것

    ..댓글이 많이 길어졌는데, 언급하신 내용에 관하여 이런 관점도 있다는 정도로만 이해해주셨으면 하는 바람입니다.

    그럼 앞으로도 좋은 글 많이 부탁드립니다.
    감사합니다.

    응답
    1. LeekyoungIl 글쓴이

      감사합니다. 내가 작성한 코드도 얼마 후에 봐도 기억이 안 나는 경우가 허다하니까요 ^^ 간단한 코멘트도 필요는 한 것이 맞습니다.

      응답

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다