선언형 코드(Declarative Programming)

선언형 코드(Declarative Programming)는 프로그래밍에서 어떤 작업을 수행하는 방법보다는 수행하고자 하는 결과에 초점을 맞춘 접근 방식입니다. 이 방식은 ‘무엇을’ 할 것인가에 집중하며, ‘어떻게’ 할 것인가는 시스템이 결정하도록 합니다.

선언형 프로그래밍의 특징은 다음과 같습니다:

  1. 추상화의 수준이 높음: 선언형 코드는 복잡한 로직이나 상태 관리를 숨기고, 더 높은 수준의 추상화를 제공합니다. 프로그래머는 세부적인 구현보다는 전체적인 목표나 명세에 집중할 수 있습니다.
  2. 코드 간결성: 선언형 프로그래밍은 일반적으로 더 간결하고 읽기 쉬운 코드를 작성하는 데 도움이 됩니다. 이는 코드의 의도를 더 명확하게 전달하고 유지 보수를 용이하게 합니다.
  3. 코드 재사용성 및 모듈성 향상: 선언형 코드는 재사용 가능한 구성 요소로 작성되기 쉽습니다. 이러한 구성 요소는 다른 컨텍스트에서도 쉽게 사용될 수 있으며, 모듈성을 향상시킵니다.
  4. 부작용 감소: 선언형 프로그래밍은 부작용(side effects)을 최소화하는 경향이 있습니다. 이는 프로그램의 예측 가능성과 신뢰성을 높이는 데 도움이 됩니다.

HTML과 SQL은 선언형 프로그래밍의 좋은 예시입니다. 예를 들어, HTML에서는 웹 페이지의 구조를 선언하지만, 이를 어떻게 렌더링할지는 브라우저가 결정합니다. SQL에서는 데이터를 어떻게 조회하고 조작할지를 선언하지만, 실제 데이터베이스가 그 쿼리를 어떻게 처리할지는 숨겨져 있습니다.

React.js 역시 선언형 프로그래밍의 접근을 사용합니다. React에서는 UI의 상태를 선언하고, 그 상태가 변경될 때 UI가 어떻게 업데이트되어야 하는지 React 엔진이 결정합니다. 이는 개발자가 UI의 세부적인 동작보다는 UI의 전체적인 구조와 동작에 더 집중할 수 있게 해줍니다.

선언형 프로그래밍을 이해하기 쉽게 만드는 좋은 방법은, 선언형과 명령형(절차적) 프로그래밍의 차이를 예시를 통해 설명하는 것입니다. 각각의 스타일은 ‘무엇을’ 하고 싶은지(선언형)와 ‘어떻게’ 해야 하는지(명령형)에 초점을 맞춥니다.

명령형 프로그래밍 예시:

문제: 리스트에서 모든 짝수를 찾아 그 합을 계산합니다.

명령형 접근:

  1. 빈 합계 변수를 생성합니다.
  2. 리스트를 순회합니다.
  3. 각 요소가 짝수인지 확인합니다.
  4. 짝수라면 합계에 더합니다.
  5. 최종 합계를 반환합니다.
numbers = [1, 2, 3, 4, 5, 6]
sum_even = 0
for num in numbers:
    if num % 2 == 0:
        sum_even += num
print(sum_even)  # 결과: 12

이 접근 방식에서는 ‘어떻게’ 계산을 해야 하는지 단계별로 설명합니다.

선언형 프로그래밍 예시:

선언형 접근:

  1. 짝수만 필터링합니다.
  2. 필터링된 숫자의 합을 계산합니다.
numbers = [1, 2, 3, 4, 5, 6]
sum_even = sum(num for num in numbers if num % 2 == 0)
print(sum_even)  # 결과: 12

이 접근 방식에서는 ‘무엇을’ 할 것인지를 선언합니다. 즉, “짝수를 찾아 그 합을 구한다”고 선언하며, 구체적인 ‘어떻게’에 대해서는 걱정하지 않습니다.

HTML의 예시:

HTML은 웹 페이지의 구조를 선언적으로 정의합니다. 예를 들어:

<!DOCTYPE html>
<html>
<head>
    <title>My Page</title>
</head>
<body>
    <h1>Welcome to My Page</h1>
    <p>This is a paragraph.</p>
</body>
</html>

여기서는 웹 페이지의 구조를 선언합니다: 제목이 있고, 그 아래에 단락이 있습니다. 이를 어떻게 브라우저에 표시할지는 선언하지 않습니다. 그 결정은 브라우저의 렌더링 엔진이 담당합니다.

React의 예시:

React에서는 UI를 선언적으로 구성합니다:

function WelcomeMessage() {
    return <h1>Welcome to My Page</h1>;
}

ReactDOM.render(<WelcomeMessage />, document.getElementById('root'));

이 코드는 “Welcome to My Page”라는 제목이 있는 컴포넌트를 선언합니다. 이 컴포넌트가 어떻게 렌더링되고, 화면에 어떻게 표시될지에 대해서는 걱정하지 않습니다. 그 작업은 React 라이브러리에 의해 처리됩니다.

이러한 예시들은 선언형 프로그래밍이 ‘무엇을’ 할 것인지에 집중하고, ‘어떻게’ 해야 하는지는 프로그래밍 언어나 프레임워크에 위임한다는 개념을 잘 보여줍니다.