InfoGrab
InfoGrab

좋은 코드 주석은 어떻게 쓰는 걸까?

좋은 코드 주석은 어떻게 쓰는 걸까?

KaneKane
··13 min read
좋은 코드 주석은 어떻게 쓰는 걸까?

이번 포스팅에서는 코드 주석의 중요성과 코드 주석을 잘 쓰는 방법을 알아봅니다. 코드에 남기는 주석은 개발자에게 가장 기본적인 콘텐츠 유형입니다. 이는 ‘자신이 작성한 코드가 하는 일’을 설명하는 걸 넘어서 설계 결정 사항과 트레이드 오프 등 고민 사항을 문서화합니다. 이로써 ‘코드 작성자가 무슨 일을 했고, 왜 그렇게 했는지’ 설명해 줍니다.

코드 주석이 왜 중요한가요?

앞서 설명했듯 코드 주석은 ‘개발자가 작성한 코드가 무엇을 하는지’ 설명하는 콘텐츠입니다. 이는 과거 코드 작성 과정에서 내린 결정의 맥락을 공유하는 데 도움이 됩니다. 또 코드만으로 표현하기 어려운 코드 정보를 전달하는 이점도 있습니다. 코드 주석이 중요한 이유를 각각 자세히 살펴보겠습니다.

복잡한 코드를 이해하는 징검다리

복잡한 코드 앞에 달린 인라인 코드 주석은 나중에 코드를 볼 다른 개발자의 시간을 절약해 줍니다. 프로젝트가 발전할수록 과거에 내린 코드 결정의 맥락을 남겨야 다른 개발자에게 도움이 됩니다. 특히 코드가 복잡하면 앞에 한 줄짜리 인라인 코드 주석이라도 있어야 합니다. 그래야 다른 개발자가 코드를 파악하는 시간을 많이 아낄 수 있습니다.

아래와 같이 주석을 달면 세부적인 내용을 몰라도 코드를 쉽게 이해할 수 있습니다.

java
public static List<Integer> findPrimes(int limit) {
    // 에라토스테네스의 체 알고리즘 사용
    boolean[] isPrime = new boolean[limit + 1];
    Arrays.fill(isPrime, true);
    isPrime[0] = isPrime[1] = false;
    for (int i = 2; i * i <= limit; i++) {
        // 소수가 아닌 배수들을 걸러냄
        if (isPrime[i]) {
            for (int j = i * i; j <= limit; j += i) {
                isPrime[j] = false;
            }
        }
    }
    List&lt;Integer&gt; primes = new ArrayList<>();
    for (int i = 2; i <= limit; i++) {
        // 소수만 결과 목록에 추가
        if (isPrime[i]) {
            primes.add(i);
        }
    }
    return primes;
}

반대 의견에도 코드 주석이 필요한 이유

코드 주석의 편의성에도 불구하고 이를 부정적으로 보는 시각도 있습니다. 어떤 사람은 ‘코드가 완벽하게 작성되면, 목적과 기능을 분명히 전달할 수 있기에 주석이 필요하지 않다’고 주장합니다. 이런 시각에는 ‘주석을 다는 건 코드에 문제가 있기 때문”이라는 인식이 깔려 있습니다. 이에 주석이 필요 없을 만큼 코드를 완성도 높게 작성해야 한다’는 것이죠.

프로그래밍 언어 Tcl(Tool Command Language)을 만든 존 오스터하우트는 이런 시각을 비판적으로 봅니다. 주석은 부실하거나 불명확한 코드를 덮는 데 사용할 수 있습니다. 그러나 코드만으로 코드 결정의 맥락을 비롯해 다양한 정보를 전달하려면 한계가 있습니다. 주석은 자연어로 쓰기에 코드로 표현할 수 없는 정보도 담을 수 있습니다. 코드 맥락을 파악하고, 코드를 정확히 이해하는 데 주석이 필요한 이유입니다.

어떻게 좋은 코드 주석을 작성하나요?

코드 주석을 무작정 쓴다고 코드를 이해하는 데 도움이 되는 건 아닙니다. 독자를 고려하지 않고 막무가내로 주석을 작성하면 보는 사람에게 유용한 주석을 제공하지 못할 수 있습니다. 좋은 글쓰기 원칙이 있듯 ‘좋은 코드 주석 쓰기 원칙’도 있습니다. 아울러 요즘은 코드 주석을 잘 작성하도록 돕는 자동화 도구도 있는데요. 이는 코드 주석을 쓸 줄 모르는 사람도 올바른 코드 주석을 손쉽게 작성하는 데 도움이 됩니다. 이 글에서는 좋은 코드 주석을 쓰는 4가지 방법을 살펴보겠습니다.

1. 간결하게 작성하기

무분별하게 코드 주석을 작성하지 않고, 꼭 필요할 때만 필수 정보를 포함하여 주석을 씁니다. 또한, 주석에 혼란과 모호함을 줄이고 유용한 맥락과 정보를 제공합니다. 아래와 같은 상황일 때 주석을 작성하면 효과적입니다.

  • 불가피하게 코드가 복잡할 때
  • 정밀도를 높이기 위해 세부 사항을 추가할 때
  • 맥락이 누락됐을 때(예: 다른 리포지터리 또는 패키지의 코드를 사용할 때)

2. TODOs/FIXMEs 주석 사용하기

TODOs/FIXMEs 주석은 ‘코드의 특정 부분에 작업이 완료되지 않았거나 수정이 필요함’을 나타내는 방법으로, 개발자들이 코드에 일반적으로 사용하는 주석입니다. 이는 함수 앞에 “TODO: XX기능을 추가해야 합니다”라는 식으로 작성합니다. 코드를 작성하다 보면 "이 부분은 나중에 다시 살펴보아야겠다" 또는 "이 기능은 추후에 개발해야 한다"와 같은 생각이 들 때가 많습니다. 이럴 때 TODOs/FIXMEs 주석을 사용하면 관련 사항을 기록하고 추적할 수 있습니다. 이는 나중에 코드를 보완할 때 도움이 됩니다.

한편, TODO Highlight 같이 IDE의 별도 확장을 이용하면 주석을 더 편리하게 달 수 있습니다.

toggle-highlight.gif

TODO Highlight로 주석을 단 모습. 출처=Visual Studio Code

3. 주석으로 코드를 변명하지 않기

잘못되고 불분명한 코드에 주석을 달며 변명하기보다 코드를 새로 작성하는 걸 권장합니다. 모든 코드에 주석을 다는 게 능사는 아닙니다. 어떤 코드는 주석으로 설명해야 하지만, 어떤 코드는 주석에 기대지 않고 ‘코드 그 자체’로 말해야 합니다. 『프로그래밍 스타일 요소』에서는 “잘못된 코드에 주석을 달지 말고 코드를 다시 작성하라”고 조언합니다. 불분명한 코드를 주석으로 해결하려는 건 근본적 해결책이 아닙니다. 코드는 그 자체로 완결성이 있어야 합니다.

1) 문제를 그대로 둔 채 주석을 단 코드

아래 코드는 불분명한 변수명을 그대로 두고, 주석으로 코드를 변명한 예입니다.

python
private static Node getBestChildNode(Node node) {
    Node n; // best child node candidate
    for (Node node: node.getChildren()) {
        // update n if the current state is better
        if (n == null || utility(node) > utility(n)) {
            n = node;
        }
    }
    return n;
}

2) 문제를 해결하고 주석을 달지 않은 코드

아래 코드는 주석으로 코드를 설명하지 않고, 불분명한 코드를 수정한 예입니다. 이 코드는 위 코드의 변수명을 직관적으로 변경했습니다. 따라서 주석 없이 코드 자체만으로 쉽게 이해할 수 있습니다.

python
private static Node getBestChildNode(Node node) {
    Node bestNode;
    for (Node currentNode: node.getChildren()) {
        if (bestNode == null || utility(currentNode) > utility(bestNode)) {
            bestNode = currentNode;
        }
    }
    return bestNode;
}

4. AI 이용하기

인공지능(AI)을 이용하면 코드 주석을 작성하는 시간을 줄이고, 효과적으로 주석을 생성할 수 있습니다. 특히 AI 주석 생성기를 사용하면 특정 표준에 따라 일관된 형식으로 주석을 만들 수 있습니다. 이에 따라 전체 프로젝트에서 주석의 일관성을 유지할 수 있어 코드의 가독성이 향상됩니다.

AI 주석 생성기는 코드 구조와 패턴을 인식할 수 있습니다. 그러나 개발자 의도나 복잡한 로직의 맥락까지 자동으로 생성할 수 없습니다. 이에 주석이 자칫 부정확하게 나올 수도 있습니다. 따라서 자동 생성된 주석만 의존하는 건 위험하며 분별력 있게 사용해야 합니다.

howitworks8.png

AI 주석 생성기 ‘Readable’ 작동방식. 출처=Readable

아래는 AI 주석 생성기 Readable로 코드 주석을 작성한 모습입니다.

output.gif

출처=Readable

맺음말

코드 주석은 개발자에게 필수 도구로, 코드 이해를 돕고 나중에 코드를 볼 다른 개발자에게 유용한 가이드가 될 수 있습니다. 적절한 주석은 코드 품질을 높이고 팀워크를 강화하는 데 중요한 역할을 합니다.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 관련한 지원이 필요하시면 문의하기로 연락 주십시오.

<참고자료>

  1. Docs for Developers 기술 문서 작성 완벽 가이드
  2. Clean Code
  3. Best practices for writing code comments
  4. The Engineer’s Guide to Writing Meaningful Code Comments
  5. 코드 가독성에 대해 - 2. 명명과 주석
⚠️
해당 콘텐츠는 저작권법에 의하여 보호 받는 저작물로 기고자에게 저작권이 있습니다.
사전 동의 없이 2차 가공 및 영리적인 이용을 금하며, 온·오프라인에 무단 전재 또는 유포할 수 없습니다.
Kane

Kane

DevOps Engineer

DevOps 도입이 필요하신가요?

인포그랩 전문가가 맞춤 을 도와드립니다.

관련 글

AI 코딩 도구 개발 결과 비교\:\ Cursor, Windsurf, Aider
AI코드

AI 코딩 도구 개발 결과 비교\:\ Cursor, Windsurf, Aider

Cursor, Windsurf, Aider는 요즘 개발자 사이에서 가장 주목받는 AI 코딩 도구입니다. 이 글에서는 세 도구를 사용해 Todo 애플리케이션을 개발한 과정과 결과를 다뤘습니다. 구체적으로 각 도구의 코드 생성 방식과 소요 시간, 파일 구조, 개발 결과물을 비교하고 도구별 특징을 살펴봤습니다.

2024년 12월 11일

JSDoc 200% 써먹기
문서화개발

JSDoc 200% 써먹기

JSDoc은 JavaScript API 문서화 도구로, 코드 가독성을 높이는 데 도움이 됩니다. 요즘 백엔드 진영에서는 Swagger가 선호되지만 프론트엔드 진영에서 유용한 JSDoc 기능이 여전히 많습니다. 타입 힌트, 타입 정의와 가져오기, 함수 정보 제시, 정보 연결과 구분이 그 예입니다. 이 글은 프론트엔드 진영에서 사용하기에 좋은 JSDoc 기능과 효과적인 활용 방법을 다뤘습니다.

2024년 11월 6일

Prettier와 ESLint로 코드 일관성·품질 향상하기
PrettierESLint

Prettier와 ESLint로 코드 일관성·품질 향상하기

개발 업무에서 코드 스타일 일관성과 코드 품질을 유지하는 건 매우 중요합니다. 이는 개발팀 협업과 팀 생산성을 향상하는 데 큰 역할을 합니다. Prettier와 ESLint는 코드 스타일 일관성과 코드 품질 관리를 돕는 도구입니다. 이 글은 코드 스타일 일관성과 코드 품질을 유지하기 위해 Next.js 프로젝트에서 Prettier와 ESLint를 사용하는 방법을 다뤘습니다.

2024년 9월 20일

인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!