선언적 프로그래밍과 절차적 프로그래밍

최정윤·3일 전
0

링크드인을 둘러보다, 문동욱 개발자님이 선언적 프로그래밍에 대해 자세하게 설명해주신 글을 발견했다.

글을 읽고 선언적 프로그래밍 개념에 대한 이해를 넘어, 코드를 작성할 때 중요한 태도가 다시 리마인드되는 부분이 있었다. 그 내용을 기록으로 남기고자 정리를 해본다.


절차적 코드

“무엇을 어떻게 할지(How)”를 시간 순서대로 서술하는 코드

절차적 코드는 목표를 달성하기 위한 단계적인 행위를 기술한다.

아래 예시는 DOM API를 이용해 사용자 프로필을 생성하는 절차적 코드이다.

function createUserProfile(user) {
  const container = document.createElement('div');
  container.className = 'user-profile';

  const nameElement = document.createElement('h2');
  nameElement.textContent = user.name;
  container.appendChild(nameElement);

  const emailElement = document.createElement('p');
  emailElement.textContent = user.email;
  container.appendChild(emailElement);

  if (user.avatar) {
    const avatarElement = document.createElement('img');
    avatarElement.src = user.avatar;
    avatarElement.alt = `${user.name}의 아바타`;
    container.appendChild(avatarElement);
  }

  return container;
}

출처: https://evan-moon.github.io/2025/09/07/declarative-programming-misconceptions-and-essence/


사용자 프로필(userProfile)을 만들기 위해 어떤 DOM 요소를 생성하고,

어떤 순서로 속성을 설정하고, 어디에 추가할지 등을 명시적으로 기술하고 있다.

즉, “행위의 순서”가 코드의 핵심이다.


선언적 코드

“무엇을 할지(What)”를 중심으로 관계를 표현하는 코드

선언적 코드는 구현의 절차보다, 관계나 구조의 표현에 집중한다.

아래는 같은 기능을 React로 작성한 선언적 코드이다.

function UserProfile({ user }) {
  return (
    <div className="user-profile">
      <h2>{user.name}</h2>
      <p>{user.email}</p>
      {user.avatar && (
        <img src={user.avatar} alt={`${user.name}의 아바타`} />
      )}
    </div>
  );
}

출처: https://evan-moon.github.io/2025/09/07/declarative-programming-misconceptions-and-essence/


여기서는 “어떤 순서로 렌더링해야 하는가”보다,

UserProfile을 구성하는 요소 간의 관계가 중점적으로 표현된다.

즉, 시간적 순서보다는 의도와 구조가 드러난다.


절차적 vs 선언적을 구분하는 것 자체는 중요하지 않다.

핵심은 “A는 절차적이고, B는 선언적이야”를 구분하는 게 아니라,

현재 다루고 있는 문제의 본질이 무엇인지를 판단하는 것이라고 생각한다.

  • 관계 표현이 중요한 부분이라면 선언적으로 접근하는 게 좋다. 도메인의 구조를 명확하게 드러낼 수 있기 때문이다.
  • 행위의 순서구현 효율이 중요한 부분이라면 절차적으로 작성해도 된다. 예를 들어 인프라 레벨에서는 안전하고 효율적인 실행이 더 중요하다.

“비즈니스 로직 레벨에서는 선언적으로 접근하는 것이 좋다.

도메인의 본질적 관계를 표현하는 데 집중해야 하기 때문이다.

반면 인프라 레벨에서는 절차적이어도 괜찮다.

효율적이고 안전한 구현이 더 중요하기 때문이다.

핵심은 경계를 명확히 하고 추상화의 레벨을 맞춰주는 것이다.

어느 레벨에서 어떤 관심사를 다루는지 분명히 구분해야 한다.”

Evan Moon, 선언적 프로그래밍에 대한 착각과 오해

결국 선언적 프로그래밍은 더 이해하기 쉬운 코드를 작성하기위한 접근 방식이라고 생각한다.

내가 표현하려는 의도를 명확히 파악하고,

그 의도를 가장 잘 드러낼 수 있는 방식을 선택할 수 있느냐가 결국 가장 중요하지 않을까.


Reference

좋은 글을 작성해주신 문동욱 개발자님께 감사의 마음을 전합니다.

profile
매일 뿌듯하기🍬🍭🍡🍫

0개의 댓글