코드 가독성의 딜레마: 쪼갤 것인가, 흘려보낼 것인가? - Part 2. 선형 코드

반응형

Part 2. 때로는 '선형 코드(Linear Code)'가 더 읽기 쉽다

SOLID 원칙의 첫번째인 "하나의 함수는 한 가지 일만 해야한다(SRP)" 는 많이 들어보셨을 겁니다.

그래서 "함수는 작게 만들어라", "한 함수는 한 가지 일만 해야 한다" 는 말도 많이 들었을 겁니다.

이러한 원칙을 맹목적으로 따르다 보면 함수는 계속해서 잘게 쪼개지게 됩니다.

 

이렇게 계속해서 작아진 함수(쪼개진 함수)의 가독성은 좋다고 할 수 있을까요?

추상화 시키는것보다 풀어쓰는 것이 더 좋을까요?

전체적인 흐름을 보여주는 클린한 코드?

def process_order(order):
    validate(order)
    prepare(order)
    finalize(order)

 

아주 깔끔해 보입니다.

전체 흐름을 이해하기 좋습니다.

 

하지만 각 흐름을 자세히 볼려고 하면 어려움에 빠지게 됩니다.

아마 prepare 함수 안에도 동일하게 추상화된 함수들로 구성되어 있을 겁니다.
그렇다면 prepare 함수의 내용을 파악하기 위해서는 내부에서도 계속해서 점프해야 합니다.

 

이 과정에서 우리는 각 함수가 어떤 변수를 받았는지 지금 함수는 어떤 함수가 호출하는지 등을 기억해야합니다.

그 과정을 반복하면 우리는 기억력의 한계에 부딪히게 됩니다.

기억해야하는 세부적인 사항이 많아지면서 흐름을 놓치게 됩니다.

 

전체적인 맥락을 한 곳에 넣은 선형 코드(Linear Code)

하지만, 선형코드는 맥락을 모아둡니다.

def make_pizza(order):
    # 1. 도우 준비
    pizza = Pizza()
    pizza.dough = "Thin" if order.type == "Diet" else "Original"

    # 2. 토핑 추가 (굳이 함수로 뺄 필요가 있을까요?)
    if order.type == "Veggie":
        pizza.add("Mushrooms")
        pizza.add("Peppers")
    elif order.type == "Meat":
        pizza.add("Pepperoni")
        pizza.add("Bacon")

    # 3. 굽기 (중요한 로직이 바로 보입니다)
    oven = get_oven()
    if oven.temp < 200:
        oven.preheat() # 예열 과정이 여기 있음을 바로 알 수 있음
    oven.bake(pizza, minutes=15)
    
    return pizza

 

이 코드 하나만으로 make_pizza 의 모든 내용을 파악할 수 있습니다.

도우가 어떻게 결정되는가?

토핑이 추가되는 조건이 무엇인가?

예열을 위한 과정이 포함되어 있는가?

 

모든 정보가 한눈에 들어옵니다.

수정이 필요하다면 이 함수 하나만 수정하면 됩니다.

 

명확한 주석을 사용한다면(// 을 통한 시각적으로 코드 구분),

작은 함수로 쪼개지 않아도 충분히 가독성 높은 코드를 가질 수 있습니다.

때로는 풀어서 쓰는 것이 더 명확하다

추상화는 복잡성을 줄여줍니다.

하지만 추상화를 적용하는 것은 공짜가 아닙니다.

추상화도 하나의 비용입니다.

예를 들어서, 추상화를 위해서는 개발자가 가장 힘들어한다는 함수이름을 계속해서 지어야합니다.

 

수천 라인의 스파케티 코드를 작성하라는 말은 아닙니다.

함수를 무조건 적으로 쪼개는 것은 멈춰야한다는 말입니다.

 

로직의 재사용이 필요없다면 굳이 함수 밖으로 빼내지 않아도 되지 않을까 고민해야합니다.

데이터의 변화가 추적되어야하는 절차적 흐름을 가진 중요 로직을 구현할 때,

선형로직으로 작성하면 더 가독성이 좋은 경우가 많습니다.

 

추상화는 복잡성을 숨기기 위한 도구입니다.

코드를 읽는 사람에게 깔끔한 목차를 보여주는 것이 좋을 때도 있지만,

때로는 상세한 내용을 한께 보여주는 것이 더 좋을 때가 있습니다.

 

2025.12.13 - [잡다한 지식] - 코드 가독성의 딜레마: 쪼갤 것인가, 흘려보낼 것인가? - Part 1. 추상화 수준 일치

2025.12.13 - [잡다한 지식] - 코드 가독성의 딜레마: 쪼갤 것인가, 흘려보낼 것인가? - Part 3. 추상화와 선형코드 사이에서 균형 잡기

반응형