[가독성에 관해서]

[이 글은 저자인 더스틴 보즈웰, 트레버 파우커가 작성한 '읽기 좋은 코드가 좋은 코드다'를 토대로 쓰여졌습니다.]


코드를 작성할 때 가장 중요한 지침을 제공하는 원리!

코드는 이해하기 쉬워야 한다



 

혹시 자신이 작성한 소스 코드를 1~2달 뒤에 보게되니 이게 어떠한 역할을 하는 코드 부분인지 몰랐던 경험이 있으신가요? 코드 구조가 복잡해지게 되면서 다른 사람뿐만 아니라 자기 자신도 못알아보게 되는 상황이 있었던 분들이 있을 것이라 생각합니다. 코드 구조가 복잡하고 코드가 함축되어 있거나, 쓸데없는 코드가 많아지다 보면 '가독성'이 떨어지게 됩니다. 여기서 가독성이란 얼마나 쉽게 읽을 수 있는지 나타내는 정도이며, 이 강좌는 가독성을 중심으로 하여 내용을 다룰 예정입니다. 먼저 코드를 작성할 때는 '기본적으로 다른 사람이 코드를 이해하는 데 들이는 시간을 최소화 하는 방식으로 작성이 되어야 한다'고 합니다. 아래 두 코드를 비교해보도록 합시다.

return exponent >= 0 ? mantissa * (1 << exponent) : mantissa / (1 << -exponent);
if (exponent >= 0) {
   return mantissa * (1 << exponent);
} else {
   return mantissa / (1 << -exponent);
}

위 두 코드를 보고 어느것이 더 눈에 확 들어오는가 하면 두번째 코드가 첫번째 코드보다 이해하기 쉽게 느껴질 수 있습니다. 여기서 완전히 이해한다는 것은 코드를 자유롭게 수정하고, 버그를 짚어내고, 수정된 내용이 우리가 작성한 다른 부분의 코드와 어떻게 상호작용하는지 알 수 있어야 한다고 합니다. 오히려 첫번째 코드를 보면 코드의 분량이 적어 더 좋게 느껴지실 수 있는데 물론 코드의 분량이 적으면 빠르게 이해할 수는 있지만 항상 그렇다는건 아니라는 겁니다. 아래의 경우를 봅시다.

assert((!(bucket = FindBucket(key))) || !bucket->IsOccupied());
bucket = FindBucket(key);
if (bucket != NULL) assert(!bucket->IsOccupied());

우선 위 두 코드는 동일한 기능을 하는 코드로, 키 값으로 양동이를 찾고 양동이가 존재한다면 해당 양동이가 가득 찰 경우 부정 연산자에 의해 거짓이 되고, 이는 assert 함수에 의해 오류 메시지가 출력되고 프로그램이 종료될 것입니다. 가득차지 않았을 경우에는 아래로 코드가 계속 진행되겠죠. 위의 두 코드를 놓고 보았을때, 첫번째 코드가 두번째 코드보다 이해하기까지 걸리는 시간이 길 수도 있습니다. 물론 적은 분량으로 코드를 작성하는 것도 좋지만, 이해에 걸리는 시간을 보다 최소화 시키는게 관건이라 할 수 있습니다. "컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다."라는 명언이 있는 것처럼, 자신이 작성한 코드를 몇개월 뒤에 다시 봤더니 낯설게 보이고, 다른 사람도 이해할 수 없는 코드라면 무슨 소용이 있을까요? 뒤로 한걸음 물러나서 이게 과연 이해하기 쉬운 코드인지 생각해보고 넘어가는 것도 중요할 듯 싶습니다.

'프로그래밍 관련' 카테고리의 다른 글

정리. 프로세스(Process)  (0) 2022.01.24