카테고리 없음

프로그래밍 패러다임

doosik 2023. 9. 12. 17:29

 

프로그래밍 패러다임

  • 프로그래밍을 작성할 때 사용되는 접근 방식을 나타낸다.
  • 어떻게 문제를 정의하고 해결하며, 코드를 구조화하고 구성하는 방식에 대한 일련의 규칙과 원칙을 나타낸다
  • 프로그래밍 언어별로 지원하는 프로그래밍 패러다임이 다르다.

 


프로그래밍 패러다임의 종류

굉장히 많은 패러다임 종류가 있는데 그 중에서 대표적이고 범용적인 패러다임만 소개하려한다.

 

명령형 프로그래밍

  • 시간 순서대로 명령해서 문제를 해결하는 방식
  • 선언형 프로그래밍과 반대 개념
  • 알고리즘을 명시하지만 목표는 명시하지 않는다.
명령형 프로그래밍은 "How" 어떻게 해결할 것인가에 초점이 맞춰져 있고,
컴퓨터가 수행할 명령들을 순서대로 적어두는 프로그래밍 수행 기법이다.

 

선언형 프로그래밍

  • 목표는 명시하지만 알고리즘은 명시하지 않는다.
  • 함수형, 논리형 프로그래밍이 대표적
선언형 프로그래밍은 "What" 무엇을 할 것인가에 초점이 맞춰져 있다.
예를 들어 SQL에서 데이터를 검색, 추가, 수정을 하고싶을때, 어떤 데이터를 원하는지 명령어만 쓰면 시스템이 어떻게 그 결과를 얻을지 결정한다.

 

명령형 vs 선언형

 

 두 개의 차이는 어떻게(How)와 무엇(What)의 차이이다.
예시를 들자면

 

예시) 낯선 사람에게 길을 알려줄 때 
- 명령형
   : 여기서 직진하고 우측으로 가다가 2블럭을 더 지난 후에 은행 앞에서  좌측으로 가시면 보일겁니다.

- 선언형
   : 그 아파트는 xx동 xx로 xx길 에 있습니다.

 

여기서 선언형은 어딘지 말해줬고 명령형은 어떻게 가는지를 설명해줬다. 선언형은 그럼 주소만 가지고 어떻게 찾아갈건지 의문점이 들 것이다.

선언형 방식이 제대로 동작하기 위해서는 명령형으로 "어떻게" 가 구현된 기능들이 준비되어 있어야 한다.

다음의 코드를 확인해보자.

 

// 명령형 방식
function add (arr) {
  let results = [];
  for (let i = 0; i < arr.length; i++){
    results.push(arr[i] + 1);
  }
  return results;
}

// 선언형 방식
function add(arr) {
  return arr.map((result) => result * 1);
}

두 함수는 배열을 매개변수로 받아 각 요소에 1을 더하는 기능을 한다.

명령형 방식은 어떻게 1을 더할지 과정을 설명하는 식으로 작성됐다. 하지만 선언형 방식은 무엇을 할지만 작성됐다.

 

즉 사용자는 javascript에 내장되어 있는 map메서드를 이용해서 같은 작업을 행했다.

개발자는 map의 코드가 어떻게 이루어졌는지 모르지만, 그것을 신경 안써도 결과값이 잘 나온다.

이런 방식은 가독성이 좋고, 상태 변경이 필요한 모든 지점들에 대해 직접 변경하지 않아도 된다.

 

 

 

절차지향 프로그래밍

정의

  • 순차적인 처리가 중요하고 프로그램 전체가 유기적으로 연결되도록하는 프로그래밍 패러다임

예시

  • 대표적인 절차지향 언어 : C언어

장점 및 단점

  • 장점
    • 컴퓨터의 작업 처리 방식과 유사 → 다른 패러다임에 비해 빨리 처리되어 시간적으로 유리
  • 단점
    • 유지보수가 어렵다
    • 실행순서가 정해져 있어 코드의 순서가 바뀌면 동일한 결과 보장이 어렵다.

 

 

객체지향 프로그래밍

정의

  • 실제 세계를 모델링하여 프로그램을 객체들의 모임으로 표현하는 프로그래밍 패러다임
  • 데이터와 그 데이터를 처리할 메소드를 한데 묶어 객체를 만들고 객체를 조립하는 것을 목표

특징

  • 각 객체들은 서로 메시지를 주고 받을 수 있으며 데이터를 처리할 수 있다.
  • 현대 프로그래밍 언어들은 대부분 객체지향 프로그래밍 패러다임을 가지고 있다.
  • 대표적인 4가지 특징
    • 추상화
      외부 인터페이스만 제공하고 객체 내부를 숨겨서 어떻게 일을 하는지 모르게 결과를 내보낸다.
    • 캡슐화
      객체 내부에 필요한 데이터를 묶어서 한번에 관리한다.
    • 상속성
      모객체를 상속 받아 추가 기능을 더 붙이거나 약간의 수정을 가한 객체를 만들 수 있다.
    • 다형성
      메소드 이름이 같아도 타입에 따라 다른 메소드를 실행할 수 있다.

장점 및 단점

  • 장점
  • 코드 재사용이 용이
  • 유지보수가 쉬움 → 대형 프로젝트에 적합
  • 단점
  • 객체가 많아지면 용량이 커짐
  • 설계가 어려워짐
요약
절차지향은 데이터 중심, 객체지향은 기능 중심
절차지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차지향이 아님 

 

 

 

- 참고

1. https://yozm.wishket.com/magazine/detail/1334/

2.https://adjh54.tistory.com/97

3.https://brownbears.tistory.com/407