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

제가 개인적으로 개발하고 있는 프로젝트가 있습니다.
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) 이정도로 사용해도 충분히 가독성을 높일 수 있을꺼 같습니다. (정상혁님 의견 감사 드립니다.)

댓글 남기기

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