카테고리 없음
프로그래밍 패러다임
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