CS/CS

명령형(imperative) VS 선언형(declarative) 프로그래밍

annovation 2024. 12. 5. 08:43

명령형 VS 선언형

명령형 프로그래밍 선언형 프로그래밍은 소프트웨어를 개발하는 두 가지 주요 프로그래밍 패러다임입니다. 이 두 방식은 문제를 해결하는 방법 코드를 작성하는 방식에서 차이가 있습니다.


명령형 프로그래밍

 

1. 특징

 

(1) 어떻게(How) 문제를 해결할지 명시

 

  • 문제를 해결하기 위해 명령(명령어의 순서)을 명시적으로 작성합니다.
  • 프로그램의 실행 흐름을 상세히 제어합니다.

(2) 프로세스 중심

 

  • 상태 변경과 실행 순서가 중요합니다.
  • 변수, 루프, 조건문 등을 사용하여 동작을 기술합니다.

(3) 전통적인 프로그래밍 방식

  • C, Java, Python 같은 언어에서 기본적으로 사용하는 방식

 

2. 예제

 

 

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = new ArrayList<>();

for (Integer number : numbers) {
    if (number % 2 == 0) {
        evenNumbers.add(number);
    }
}

System.out.println(evenNumbers); // 출력: [2, 4]
  • 프로그래머가 직접 for 반복문과 조건문으로 데이터 처리 과정을 상세히 명령
  • 데이터를 어떻게 필터링하고 저장할지 단계별로 작성

선언형 프로그래밍

 

1. 특징

 

(1) 무엇(What) 문제를 해결할지 명시

 

  • 목표를 명시하고, 구현 세부사항은 추상화합니다.
  • 어떻게 처리할지는 언어나 라이브러리에 맡깁니다.

(2) 결과 중심

 

  • 코드가 실행되는 방법보다는 원하는 결과에 집중합니다.
  • 명령어보다 데이터와 규칙을 기술하는 방식

(3) 함수형 프로그래밍 언어와 관련

  • SQL, React, Haskell, JavaScript(ES6+) 등이 선언형 프로그래밍의 대표적인 예입니다.

 

 

2. 예제

 

(1) Java

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> evenNumbers = numbers.stream()
                                   .filter(n -> n % 2 == 0) // 짝수만 필터링
                                   .collect(Collectors.toList());

System.out.println(evenNumbers); // 출력: [2, 4]
  • "짝수만 필터링해서 리스트로 저장"이라는 의도만 표현
  • 반복문이나 조건문 같은 세부 동작은 Stream API가 처리

(2) SQL

SELECT * FROM users WHERE age > 30;
  • "나이 30 이상인 사용자를 가져와"라는 결과만 표현.
  • 데이터 검색의 세부 동작(루프, 조건 검사)은 SQL 엔진이 처리.

 

(3) HTML

<div>
  <p>Hello, World!</p>
</div>
  • "웹 페이지에 'Hello, World!'를 보여줘"라는 의도만 표현
  • 브라우저가 이를 렌더링하는 과정을 처리

출처

OpenAI ChatGPT (https://openai.com)

 

반응형