[Computer Science] 프로그래밍 패러다임

양영준·2026년 1월 14일

Computer Science

목록 보기
3/5
post-thumbnail

📌 프로그래밍 패러다임

프로그래밍 + 패러다임 으로 개발자가 프로그래밍을 위해 어떠한 관점을 가지고 개발을 할 지에 대해서 결정하는데 도움을 주는 것
개발자로 하여금 프로그래밍할 때에 관점을 제시해주는 역할을 한다.

프로그래밍이란?

하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술

패러다임이란?

어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리
인식의 체계, 사물에 대한 이론적인 틀이나 체계를 의미하는 개념을 의미한다.

📌 프로그래밍 패러다임의 동향

통상적으로 프로그래밍 패러다임 은 아래 3가지를 의미한다.

  1. 절차적 프로그래밍 (PP, Procedure Programming)
  2. 객체지향 프로그래밍 (OOP, Object Oriented Programming)
  3. 함수형 프로그래밍 (FP, Functional Programming)

프로그래밍 패러다임의 등장 순서는 함수형 -> 객체지향 -> 절차적 이다.
그러나 성장은 절차적 -> 객체지향 -> 함수형 의 순서로 성장하였으며 이전의 패러다임의 문제점을 보완하는 과정에서 성장하였다.

그러므로 프로그래밍 패러다임은 단순히 진화론적 관점에서 우열을 판단할 수 없다.
프로그래밍 패러다임은 접근 방식사용 환경에 따라 유동적으로 활용해야 한다.
각각의 프로그래밍 패러다임은 장단점이 존재하며 이 때문에 상호 보완적 특성을 가진다.

📌 프로그래밍 패러다임의 분류

프로그래밍 패러다임은 방법 / 목적 에 따라 크게 두가지로 분류된다.

  • 명령형 프로그래밍 (Imperative Programming)
    • 절차적 프로그래밍
    • 객체 지향 프로그래밍
  • 선언형 프로그래밍 (Declearative Programming)
    • 함수형 프로그래밍
    • 논리형 프로그래밍

명령형과 선언형의 차이?

명령형 프로그래밍은 어떻게 구현할 것인가? (HOW) 에 초점이 맞춰져 있다.
따라서 해당 과정마다 구체적인 임무를 제시하고 일부 참고 사항까지 제시한다.

반면, 선언형 프로그래밍은 무엇을 구현할 것인가? (WHAT) 에 초점이 맞춰져 있다.
선언형 프로그래밍을 하기 위해선 명령형 프로그래밍 단계가 이미 추상화되어 있다는 가정이 뒷받침 되어야 한다.

예시

명령형과 선언형의 차이를 잘 설명한 블로그가 있어 해당 블로그에서 사용한 예시를 통해 이해하였다.

해당 그림은 치즈 생산을 두가지 형태에 따라 지시하는 예시를 나타낸 것이다.
좌측 그림은 명령형 접근에 대한 그림이고 우측 그림은 선언형 접근에 대한 그림이다.

명령형 접근을 통해 치즈를 생산할 경우 치즈를 생산하는데 필요한 과정 및 해당 과정마다 진행해야할 구체적인 임무와 참고 사항까지 제시한다.

반면 선언형 접근을 통해 치즈 생산을 하는 경우 치즈 생산 그 자체에만 초점을 맞추며, 생산 관리자는 지시를 내리는 행위만으로도 결과물을 도출한다.
이 때 치즈를 생산하는 행위는 명령형 접근을 통해 미리 생산 로직이 추상화 되어 있어야 한다.

절차적 프로그래밍

  • 함수 호출을 중심으로 프로그래밍을 생각하는 패러다임
  • Top-Down 방식의 프로그래밍 방식
    절차적 프로그래밍에서는 main 함수가 하나의 큰 추상 개념이라고 보고, 그 안에서 함수 호출, 조건문 사용 등을 통해 구체화해나간다.

함수 호출 중심?

전체 로직에서 재사용성이 높은 (재사용이 가능한) 코드들을 별도의 함수로 분리하여 필요할 때마다 해당 함수를 호출하는 방식의 프로그래밍

Top-Down 방식?

추상적인 개념을 구체화하는 방식
ex)
'핸드폰으로 사진을 찍는다.' 라는 추상적인 상황을 '카메라 앱을 선택한다 -> 원하는 모드를 선택한다 -> 초점을 맞춘다 -> 셔터를 누른다' 의 여러가지 상황으로 구체화한다.

장점

  • 프로그램의 목적을 이해하기 쉽다.

단점

  • 프로그램이 복잡해질수록 프로그램의 방향성을 이해하기 어려워지며 유지 보수도 어려워진다.

객체 지향 프로그래밍

  • 객체를 최소 단위로 하여 객체끼리 상호작용을 하도록 설계하는 패러다임
  • 객체마다 데이터메소드(함수)를 가짐
  • 객체와 객체 간의 메소드 호출을 통해 프로그래밍이 진행

장점

  • 쉽게 코드를 확장할 수 있다.
  • 작관적이며 유지 보수가 쉽다.

단점

  • 객체에 대한 이해가 없으면 코드를 이해하기 어렵다.

함수형 프로그래밍

  • 함수를 최소 단위로 하여 외부 상태를 갖지 않는 함수들을 통해 파이프 형태로 프로그래밍하는 패러다임
  • 주어진 문제를 잘게 쪼개 그 문제를 해결하는 함수를 만들고 이를 결합하는 방식

외부 상태를 갖지 않는다?

같은 입력을 넣었을 때 언제나 같은 출력을 내보낸다는 것을 의미
즉, 어떠한 외부 요인도 함수의 입출력에 영향을 주지 않는다는 것

  • 한 번 초기화한 객체 및 변수는 변하지 않음 (불변성)
    이 때문에 프로그램의 동작을 예측하기 쉽고 프로그램의 데이터 흐름이 유지될 수 있음

장점

  • 불변성 때문에 프로그램의 동작을 예측하기 쉽고 프로그램의 데이터 흐름이 유지될 수 있음
  • 외부 상태로 인한 부작용이 없기 때문에 안정적
    그러므로 동시성을 가지는 프로그램에 사용하기 적합

단점

  • 온전히 함수형 프로그래밍으로 구성하기 위해서 굉장히 다양한 함수를 조합해야 함

논리형 프로그래밍

논리형 프로그래밍에 대한 자료가 그렇게 많지 않고 생소한 용어이기 때문에 추가적인 학습이 필요하다.

  • 논리식이나 조건문이 단위
  • 논리적으로 맞는 답을 도출하는 것이 목표
  • 논리를 선언하는 것에 신경을 쓰고 도출 과정은 신경쓰지 않음

Reference

프로그래밍 패러다임 - 위키백과
[Java] 프로그래밍 패러다임 이해하기
[CS/Basic] 좀 더 나은 프로그램을 위해, 프로그래밍 패러다임
프로그래밍 패러다임 : 절차지향 vs 객체지향 vs 함수형
프로그래밍 패러다임의 동향 이미지 출처
[프로그래밍언어론] 11. Logic Programming Language (Prolog)
논리형 프로그래밍

profile
학습 내용 정리 순차적 갱신 / 정리 중

0개의 댓글