가독성을 높이는 코드 작성법
『코드 작성 가이드』 이시가와 무네토시 저자 서면 인터뷰
저 또한 읽기 쉬운 코드란 무엇인지, 개발자는 어떠한 경우에 코드를 읽기 어렵게 작성하는지, 읽기 쉬운 코드를 작성하기 위해 어떻게 해야 하는지를 고민했습니다. 이 책이 조금이나마 개발자들에게 도움이 되기를 기원합니다.(2024.05.17)
개발자라면 ‘내가 왜 이런 코드를 짠 걸까'라며 자책한 경험이 있을 것이다. 분명 복잡한 코드가 아닌데 이해하기 어렵고 조금만 변경해도 쉽게 망가지거나, 코드를 작성한 당시에는 완벽하다고 생각했지만, 몇 달 후 다시 봤는데 전혀 이해할 수 없을 때 당황스럽기도 하다. 저자 또한 비슷한 경험을 여러 번 겪었다. 그래서 읽기 쉬운 코드가 무엇인지, 읽기 쉬운 코드를 작성하기 위해서 어떻게 해야 하는지 등을 고민했고, 자신의 경험을 바탕으로 읽기 쉽고 이해하기 좋은 코드를 작성할 수 있는 원칙을 이 책에 담았다.
안녕하세요! 한국 독자들에게 간단한 자기소개 부탁드립니다.
안녕하세요, 이시카와라고 합니다. 저는 현재 커뮤니케이션 플렛폼 LINE의 모바일 앱 개발 업무를 담당하고 있어요. 그 외에도 서버 사이드를 포함한 다양한 제품들의 코드 품질을 개선하는 기술적 지원, 개발자들을 대상으로 하는 교육 관련 업무를 맡고 있습니다.
책을 출간하게 된 계기는 무엇인가요?
Github에는 이 책 『코드 작성 가이드』의 근간이 되는 슬라이드 파일이 올라가 있는데요, 사실 이것은 제 스스로가 코드 리뷰를 좀 더 편하게 하고 싶어서 만든 자료에요. 코드 리뷰를 통해 개선을 제안할 때에는 자신의 생각을 잘 정리해서 전달해야 하는데, 정리한 내용을 문서나 발표 자료 형태로 남겨두면 유사한 상황에서 다시 활용하거나 나중에 회고할 때 유용하게 사용할 수 있으니까요. 또 비슷한 문제에 직면한 다른 사람들과 지식을 공유할 수도 있죠. 처음 이 발표 자료를 만들었을 때는 단순히 나 자신과 주변 동료들을 위한 용도로만 생각했는데, 자료를 공개했더니 많은 사람들이 관심을 가지고 긍정적인 피드백을 남겨주셨어요. 그러던 중에 사내 채팅 채널에서 제가 '책으로 만들어지면 좋겠다'고 무심코 얘기했더니 도움을 주겠다고 반응 해주신 분이 계셨고, Developer Relations 부서에서 출판사를 연결해주셔서 출판을 기획하게 된 거죠.
한국어 번역판이 출간된다는 소식을 들었을 때 어떤 느낌이었나요? 그리고 번역자를 직접 추천해 주셨다고 들었는데, 그 이유는 무엇인가요?
LINE의 모바일 클라이언트 개발 조직에는 한국에서 근무하는 멤버들도 많은데 저희들은 매우 밀접한 협업 관계에 있어요. 또 저는 LINE에서 일하기 전에 구글에 있었는데, 그때도 구글의 한국 팀과 협업할 기회가 많았어요. 제 경력의 상당 기간을 한국의 개발자들과 함께한 셈이죠.
그런 의미에서 제 책의 첫 번역서가 한국어로 출간되었다는 사실은 저에겐 굉장히 특별한 의미를 가지고 있어요.
저는 이 책의 번역을 같은 팀 동료인 정기욱님께 부탁했는데, 그 이유가 꼭 그가 일본어에 능통하기 때문만은 아니었어요. 기욱님은 기술력이 뛰어난 분인데다 무엇보다 저희 팀원 모두에게 신뢰받는 사람이기 때문이었죠. 그리고 같은 팀에서 일하는 동료인 만큼 의사소통에 대해 전혀 걱정할 필요가 없다는 점도 제게 큰 안도감을 주었어요. 실제로 기욱님은 번역을 진행하시면서 기존의 표현을 한국어로 했을 때 어색함이 없는지, 한국인들에게 더 익숙한 표현으로 바꾸어도 내용의 불일치가 발생하지는 않을지 등 매우 세세한 부분까지 고려하시면서 제게 많은 질문을 주셨어요. 비록 저는 한국어를 읽을 수 없지만, 분명 이 책의 번역이 높은 완성도로 이루어졌다고 확신할 수 있어요.
『코드 작성 가이드』에서는 주로 어떤 내용을 다루고 있나요?
『코드 작성 가이드』에서는 지속 가능한 소프트웨어 개발을 가능하게 할 방법을 프로그래밍 원칙부터 코드 리뷰에 이르기까지 다양한 각도에서 소개하고 있어요. 이 책의 내용 중 특징으로 꼽을 수 있는 것은 다음 두 가지라고 생각해요.
먼저 이 책에서는 어떤 기법을 적용할 지 보다 어떻게 접근해야 할 지에 대해 초점을 두고 있어요. 단순히 기법만 익히고 그 바탕이 되는 개념을 놓치면 원칙이나 기법을 잘못 적용할 수도 있거든요. 그래서 이 책에서는 유용하게 쓸 수 있는 프로그래밍 원칙과 기법을 소개하면서도 근본적인 사고방식을 학습할 수 있도록 그 이론들을 사용하지 말아야 할 상황에 대해서도 함께 설명합니다.
또 다른 특징으로는 다른 서적들의 설명을 보완했다는 점을 꼽을 수 있을 것 같네요. 일반적으로 볼 수 있는 코드 가독성에 대한 설명은 ‘들여쓰기를 정돈하기’, '중첩을 줄이기'와 같은 작은 범주에서의 내용이거나, 반대로 아키텍처와 같은 큰 범주를 다루는 경우가 많은 것 같아요. 하지만 저는 그 사이를 연결하는 중간 부분의 설명 또한 매우 중요하다고 생각해요. 예를 들어 의존관계나 상태 설계에 대해 집필할 때에는, 독자가 이 개념을 통해 적용하려는 아키텍처가 적절한지 아닌지를 보다 수월하게 판단할 수 있도록 했어요.
이 책에서는 주로 코드의 가독성을 강조하는데, 그 외에 코드를 작성할 때 주의해야 할 점에는 어떤 것들이 있을까요?
일반적으로 코드 품질의 척도에는 가독성 외에도 유연성, 확장성, 재사용성, 성능 등 다양한 기준들이 있어요. 물론 모두 중요하지만, 때로는 이 기준들이 서로 상충되는 관계일 수도 있어요. 일부 동작의 성능을 높이려다가 되려 코드의 가독성이나 재사용성이 떨어지는 경우가 그렇죠. 이러한 기준들의 우선순위를 어떻게 정할 것인가는 매우 어려운 문제이면서도 동시에 매우 중요한 문제이기도 해요. 사람마다 우선하는 기준이 다르기 때문에 개발자들은 코드 리뷰나 대면 토론을 통해 의견을 나누면서 조율해 나가야해요. 저는 이러한 과정이야말로 개발의 큰 재미라고 생각합니다. 그런 의미에서 본다면 코드 품질에 있어 가장 중요한 것은 코드 자체의 특성보다 기술적인 토론을 즐길 수 있느냐 없느냐가 아닐까 싶어요.
저의 경우에는 ‘가독성’ 못지않게 코드의 ‘견고성’ 또한 중요하게 생각하는데요, 잘못 사용되거나 잘못 변경되기 어려운 성질을 뜻하는 ‘견고성’이 때로는 적은 코드 변경으로 더 폭넓게 사용할 수 있는 성질, 즉 ‘유연성’과 상충관계가 되기도 하죠. 저는 기능 확장을 할 때 비록 적은 양의 코드 변경이라도 그 변경에 실수가 있어서는 안 된다고 생각하기 때문에 가독성보다 견고성을 우선하는 편이에요. 특히나 대규모 제품 개발에서는 그 코드 변경이 안전하다는 보장을 할 수 있는 것이 매우 중요하거든요.
실제 업무에서 이런 코드 때문에 정말 힘들었다! 라는 사례가 있다면 간단히 소개해주세요. 그리고 어떻게 해결했는지 궁금합니다.
예전에 함수 호출의 매개변수가 300줄 이상의 익명 객체로 이루어져 있고, 중첩 깊이가 무려 15단이나 되는 코드와 마주한 적이 있었어요. 그 익명 객체 안에는 분기, 루프, 또 다른 익명 객체가 겹겹이 쌓여 있는 코드였는데, 라인 수는 그렇게 많지 않았지만, 다른 클래스들과 복잡하게 얽혀 있어 처리 흐름을 따라가는 것만으로도 정신이 아득해질 정도였어요. 저는 우선 그 코드가 무엇을 하는지 파악하기 위해 로직이 변경되지 않는 선에서 '정의 기반 프로그래밍'을 조금씩 적용해 보았죠. 그렇게 하나씩 중첩을 풀어가다 보니 차차 그 코드가 무엇을 하고 있는지 파악해 나갈 수 있었어요.
코드의 의도를 파악한 후에는 과감하게 함수 호출 순서와 분기 조건을 단순화하고, 필드가 취할 수 있는 상태를 제한하고, 클래스 간의 종속성을 정리해 나갔습니다. 꽤 힘든 작업이었지만, 점차 가독성이 좋아지는 것을 느낄 수 있었고, 마치 퍼즐을 푸는 듯한 재미도 있었어요.
마지막으로 이 책을 어떤 사람들에게 추천하고 싶으신가요?
저는 이 책을 업무, 연구, 취미를 막론하고 코딩이나 코드 리뷰를 하는 모든 개발자에게 추천하고 싶어요.
많은 개발자들은 '어떻게 구현하면 더 읽기 쉬운 코드로 구현할 수 있을까'를 고민하거나, 코드 리뷰를 할 때 '왠지 읽기가 불편한데 어떻게 리뷰를 써야 할지 모르겠다'고 생각할 때가 있을 거에요. 이럴 때 이 책을 옆에 두고 페이지를 넘기면 뭔가 힌트를 얻을 수 있을지도 모릅니다. 이 책이 많은 개발자들에게 도움이 되었으면 좋겠네요.
*이시가와 무네토시 주식회사 LINE의 LINE Platform Development 2센터, Mobile Experience 개발실의 Developer Experience 개발팀 소속이다. 시니어 소프트웨어 엔지니어로, LINE의 안드로이드 버전을 개발하고 있다. 또한, LINE의 소스 코드 가독성 향상을 위해 리팩터링과 코드 리뷰를 자체적으로 수행하며, 가독성과 관련된 개발 문화와 인프라를 구축하고 있다. 교육과 채용 프로세스 등을 개선하기도 한다. |
추천기사
<이시가와 무네토시> 저/<정기욱> 역21,600원(10% + 5%)
읽기 쉽고 이해하기 좋은 코드를 작성하려면 어떻게 해야 할까? 현직 LINE 개발자가 알려주는 가독성 높은 코드 작성법! 네이밍부터 코드 리뷰하는 방법까지! 개발자라면 ‘내가 왜 이런 코드를 짠 걸까'라며 자책한 경험이 있을 것이다. 분명 복잡한 코드가 아닌데 이해하기 어렵고 조금만 변경해도 쉽게 망가지..
<이시가와 무네토시> 저/<정기욱> 역19,200원(0% + 5%)