가독성과 간결성 어떤 게 우선일까?

이재환·2025년 4월 13일
4
post-thumbnail

프로젝트를 진행하면서 “Explicit이 명확하다” versus “Implicit이 간결하다”는 의견을 접하게 됩니다. 이 글에서는 코드 작성 시 명시적(Explicit) 방식과 암시적(Implicit) 방식을 어떻게 선택해야 하는지, 그리고 둘 사이의 균형점은 무엇인지에 대해 이야기해보려 합니다.

읽기 쉬움 vs 코드 길이

우리가 코드를 작성할 때 두 가지 목표를 동시에 달성하기 쉽지 않습니다. 가독성은 팀원들이 코드를 빠르게 이해할 수 있게 돕지만, 때로는 코드가 장황해져서 개발 속도를 저하시킬 수 있습니다. 반대로, 간결한 코드는 짧고 효율적이지만, 처음 보는 사람이 의도를 파악하기 어려울 위험이 있습니다.

Implicit vs Explicit

암시적(Implicit) 접근법

암시적 코드는 “눈에 보이지 않더라도” 시스템이나 인터프리터가 내부적으로 처리해주는 방식을 의미합니다. 예를 들어, 파이썬에서는 변수에 타입을 선언하지 않아도 변수에 할당된 값으로 타입이 자동으로 결정됩니다.

greeting = "Hello, Python!"

장점으로는 코드를 짧고 간결하게 작성할 수 있고 단점으로는 코드 자체만 봐서는 greeting의 데이터 타입이나 의도된 사용이 명확하지 않을 수 있습니다.

명시적(Explicit) 접근법

명시적 코드는 변수나 함수의 목적, 타입, 처리 과정을 개발자가 직접 드러내는 방식입니다. 코드만 보더라도 그 역할과 의도가 분명해져 팀원 간의 소통이나 나중에 코드를 읽을 때 이해하기 쉽습니다.

greeting: str = "Hello, Python!"

장점으로는 코드의 의도가 명확해지며, 유지보수 시 실수를 줄일 수 있습니다. 단점으로는 경우에 따라 코드가 장황해질 수 있고, 반복적인 선언이 개발 속도를 저해할 수도 있습니다.

변수 및 함수 선언

암시적 선언

변수나 함수의 역할이 간단할 땐 암시적 선언을 통해 코드를 간결하게 유지할 수 있습니다.

def calc_total(items):
    return sum(items)

이 함수는 간단한 합계를 계산하지만, 함수 이름이나 파라미터만 봤을 때 어떤 자료형이 사용되는지 모호할 수 있습니다.

명시적 선언

반대로, 복잡한 데이터나 여러 타입을 혼용하는 경우라면 명시적인 타입 주석과 함수명을 사용하는 것이 좋습니다.

from typing import List

def calculate_total_price(item_prices: List[float]) -> float:
    return sum(item_prices)

함수 이름과 타입 주석을 통해 이 함수가 무엇을 기대하는지, 그리고 어떤 결과를 내는지 명확히 드러납니다.

네이밍 컨벤션

암시적 네이밍

간략한 변수명과 모호한 함수명은 코드의 가독성을 해칠 수 있습니다. 예를 들어,

def process():
    # 코드 내용
    pass

a = 10

이런 경우 다른 개발자가 코드를 읽을 때 의도를 파악하기 어려워질 수 있습니다.

명시적 네이밍

함수와 변수의 이름을 충분히 설명적으로 지으면, 코드를 보지 않아도 그 역할을 이해하기 쉽습니다.

def authenticate_user(username: str, password: str) -> bool:
    # 인증 로직 실행
    pass
retry_limit = 10

이처럼 이름에서 바로 기능이나 목적이 드러나면, 유지보수와 협업 시 큰 도움이 됩니다.

언제 어떤 방식을 선택할까?

개발 환경이나 협업 상황에 따라 암시적 접근과 명시적 접근 사이에서 균형을 찾아야 합니다.
빠른 프로토타이핑이나 단순 기능 구현에는 간결한 암시적 코드를 활용해 개발 속도를 높이고, 이후 리팩토링 단계에서 명시적 요소를 보완할 수 있습니다.
대규모 프로젝트나 팀 협업에는 코드의 가독성과 유지보수를 위해 처음부터 명시적 코딩을 지향하는 것이 좋습니다.

0개의 댓글