이번 글에서는 A Philosophy of Software Design ( 이하, APoSD ) 이라는 책을 읽으면서 느꼈던 주석의 장점에 대한 이야기를 해보려고합니다.
주석의 단점은 사실 거짓일 수도 있습니다.
보통 많은 책에서 주석을 쓰는 것에 대해서 부정적인 이야기를 많이합니다. 그렇게 말하는 사람들은 대부분 아래의 이유를 이야기합니다.
물론, 이 네가지 이유는 코드를 작성하다보면 이해할 수 있는 의견이긴합니다. 하지만 APoSD에서는 이것을 정면으로 반박합니다.
저자의 반박은 매우 합리적입니다. 하지만 저희는 아직 주석을 잘 작성하는 방법을 모릅니다.
이제부터 알아보겠습니다.
주석은 코드에서 명백하게 드러내지 못하는 부분을 설명해야합니다.
주석을 잘 작성하기 위해서는, 주석은 코드에서 명백하지 않은 부분을 설명해야한다는 것을 명심해야합니다.
이제부터 코드에서 잘 드러내지 못하는 부분을 어떻게 주석으로 잘 작성할 수 있는지에 대해 알아보겠습니다.
잘 작성하기 전, 주석의 종류부터 알아보겠습니다.
주석의 종류라니 익숙치 않은 개념이지만, 이 개념을 이해하고 어떠한 주석이 필요한지 이해해봅시다.
인터페이스 주석 : 클래스, 자료구조, 함수, 메소드등의 인터페이스를 설명하는 주석. 메소드나 함수를 설명해야하는 경우, 그것의 전반적인 동작 방식과 인수 및 반환 값을 설명합니다. 만약 사이드 이펙트가 있다면, 그것도 명시해야합니다.
자료 구조 주석 : 인스턴스 변수 혹은 정적 변수를 설명하기 위해 작성하는 주석
구현 주석 : 메소드 혹은 함수 내부에 존재하는 주석으로, 코드가 내부에서 어떻게 작동하는지를 설명합니다.
모듈 간 주석 ( Cross module comment ) : 모듈간의 관계를 설명하는 주석
위에서 알아본 주석의 종류를 통해서, 코드의 어느 부분에 어느 주석이 정리해보겠습니다.
지금까지 어떤 종류의 주석이 있고, 그 주석들은 어디에 위치해야하는지 알아보았습니다.
그럼 그 주석은 어떻게 작성하는게 좋을까요? 아래 내용들만 주의하면 됩니다.
주석을 나중에 해야 할 일이라고 미루지 마세요.
여태까지 주석을 잘 작성하는 방법에 대해 알아보았지만, 결국 제일 중요한 것은 주석을 작성하는 태도라고 생각합니다.
어떻게 해야 주석을 사용하는 것에 익숙해질 수 있을까요? 이 책에선 "주석을 코드보다 먼저 작성하는 방식"을 추천합니다.
보통 많은 사람들은 코드를 작성하고 나서 주석을 작성합니다. 하지만, 이 경우 미루다가 안쓰거나 적당히 타협하게 되는 일이 많아집니다.
이런 사람들에게 APoSD의 저자가 하고 싶은 말은 "주석을 코드보다 먼저 작성해라" 입니다. 주석을 먼저 작성하게되면, 주석을 잊어먹을 일도 없고 아래에서 설명할 여러가지 장점을 얻을 수 있습니다.
책에서 추천하는 방식은 아래와 같습니다.
인터페이스 주석 작성 -> 메서드 본문 작성 -> 작성중 부족한 부분의 인터페이스 주석을 추가 ->
메소드 본문 구현 완료 -> 메소드 구현 주석 작성
이런 방식으로 주석을 작성하면, 여러가지 장점이 있습니다.
주석을 먼저 작성하는 방식은 주석을 설계 도구 처럼 사용할 수 있습니다.
주석을 먼저 길고 자세하게 작성하게된다면, 그것을 작성하게 되면서 구현 전에 설계의 문제를 찾거나 설계를 조율할 수 있습니다.
또한, 주석을 작성하면서 인터페이스를 짧게 설명할 수 있으면 그 인터페이스는 간단하게 잘 정의되었다고 할 수 있습니다. 만약 주석이 길어진다면, 그 인터페이스가 충분히 추상화되지 않았다는 것을 의미합니다.
이러한 방식으로 주석을 먼저 작성하게 되면, 주석은 설계 도구의 역할도 하게 됩니다.
주석을 코드 근처에 두어 코드 수정시 주석도 함께 수정될 수 있도록하자.
앞서 말했듯이 주석을 수정하는 것은 코드의 수정보다 훨씬 쉽습니다. 하지만 그 수정해야할 주석을 찾기 어려우면, 쉬운 수정조차 어려운 작업이 되어버립니다.
그럼 어떻게 해야할까요? 저자는 아래의 방식을 추천합니다.
위와 같은 방식만 지킨다면, 주석을 관리 및 수정이 매우 쉬워질 것입니다.
A Philosophy of Software Design 다들 한 번씩 읽어보세요.
여러 책을 읽어봤지만 이 책과 같이 주석의 중요성을 설명하는 책이 없었던 것 같습니다.
영어라는 압박이 있지만, 저자의 깔끔한 논리 전개가 놀라운 책이였고 매우 재미있게 읽었습니다.
모두에게 추천합니다!
저는 현재 AUSG라는 동아리에서 활동하면서 다른 동아리원분들의 많은 발표를 듣고, 스터디에 참여하고 있습니다.
곧, AUSG 7기를 모집하니 많은 관심 부탁드립니다.
저도 "주석을 작성하면 코드를 못짠거다" 라는 선입견에 갇혀 있었는데요 ㅎㅎ 일해보니 주석을 활용하면 좋은 경우가 훨씬 많더라구요.
특히 비즈니스를 코드로 녹여내면서 어쩔 수 없이 발생하는 예외들을 기록으로 남기면 동료의 시간을 많이 아낄 수 있었던 것 같아요. 재밌는 글 잘 읽었습니다
++ 막간 홍보 든-든하네요 ㅋㅋㅋ