명령형 프로그래밍 VS 선언형 프로그래밍

wujin·2023년 12월 26일

명령형 프로그래밍(Imperative Programming)

명령형 프로그래밍은 '어떻게' 할 것인가에 초점을 맞춘다.
개발자는 원하는 결과를 얻기 위해 수행해야 하는 단계별 명령을 명시적으로 작성한다.

특징

  • 순차적인 실행: 명령어가 위에서 마래로 순서대로 실행된다.
  • 상태 변경: 변수나 데이터 구조를 직접 변경하여 프로그램의 상태를 변화시킨다.
  • 반복문: for, while, do-while 과 같은 반복문을 사용하여 반복적인 작업을 수행한다.
  • 제어 흐름: if, else, switch 과 같은 조건문을 사용하여 프로그램의 흐름을 제어한다.

예시

public class Factorial {

    public static int factorial(int n) {
        int result = 1;
        for (int i = 1; i <= n; i++) {
            result *= i;
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(factorial(5)); // 120 출력
    }
}

장점

  • 배우고 사용하기 쉽다.
  • 대부분의 프로그래밍 언어가 지원한다.
  • 유연하고 다양한 문제를 해결할 수 있다.

단점

  • 복잡한 문제를 해결할 때 코드가 길어지고 복잡해질 수 있다.
  • 프로그램의 상태를 직접 관리해야 하므로 버그가 발생하기 쉽다.

선언형 프로그래밍(Declarative Programming)

선언형 프로그래밍은 '무엇을' 할 것인가에 초점을 맞춘다.
개발자는 원하는 결과를 선언(묘사)하는 방식으로 코드를 작성한다.

특징

  • 목표 중심: 원하는 결과를 명시하고, 컴퓨터가 알고리즘을 선택하여 결과를 달성하도록 한다.
  • 상태 변화 감소: 변수나 데이터 구조를 직접 변경하지 않고, 새로운 상태를 선언한다.
  • 함수형 프로그래밍: 함수를 사용하여 코드를 구성하고, 순차적인 실행에 의존하지 않는다.
  • 불변성: 데이터 구조를 변경하지 않고 새로운 데이터 구조를 생성한다.

예시

public class StreamExample {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        int sum = numbers.stream()
                .filter(x -> x % 2 == 0) // 짝수만 선택
                .sum(); // 합계 계산

        System.out.println(sum); // 6 출력
    }
}

장점

  • 코드가 간결하고 이해하기 쉽다.
  • 프로그램의 상태를 추상적으로 표현하여 버그를 줄일 수 있다.
  • 유지 관리가 용이하고 확장성이 뛰어나다.

단점

  • 배우고 사용하기 어려울 수 있다.
  • 모든 문제를 해결하기에는 적합하지 않다.
  • 지원하는 프로그래밍 언어가 비교적 적다.

기준명령형 프로그래밍선언형 프로그래밍
초점"어떻게" 할 것인가"무엇을" 할 것인가
코드 스타일명령 직접 작성결과 선언
프로그램 상태명시적 변경추상적 표현
예시 언어C, C++, Java, PythonHaskell, Prolog, SQL

https://boxfoxs.tistory.com/430

0개의 댓글