[OOP] 1️⃣ | Programming Paradigm

WONNY_LOG·2023년 4월 17일
0

https://velog.velcdn.com/images/jaewon97/post/c3ddf5bc-d732-4b76-ab5f-5d80987cfe9e/image.png

프로그래밍 패러다임 ?

프로그램을 만들 때 (어디에 초점을 맞춰서) 어떠한 관점으로 바라보며 만들 것인가?

프로그래밍 패러다임의 다양한 종류 중 대표적인 2가지에 대해 이야기하려고 한다.

  • 명령형 프로그래밍
    • 절차적 프로그래밍
    • 객체 지향 프로그래밍
  • 선언형 프로그래밍
    • 함수형 프로그래밍
    • 반응형 프로그래밍

1.명령형 프로그래밍 ?

선언형 프로그램과 반대되는 개념컴퓨터가 수행할 행동들을 순서대로 써놓아 명령하는 것

(HOW)어떻게 할것인가? 빵위에 크림을 바르고, 과일을 올리고, 시럽펜으로 글씨를 써줘!

1-1. 절차적 프로그래밍 ?

프로그래밍 전체가 유기적으로 연결 되도록 만든 프로그래밍 기법문제를 여러 개의 함수로 나누어 순차적으로 호출하여 처리하는 방식대표 언어: C언어

  • 데이터 흐름을 기반으로 위에서 아래로 흐르는 Top-Down 방식의 순차적 처리 방식이다
  • 컴퓨터 작업 처리 방식과 유사하여 다른 패러다임에 비해 더 빨리 처리 되어 시간적으로 유리하다 (전통적인 개발 방법)
  • 프로그램을 함수 단위 (데이터를 처리하는 부분)로 나누어 구조화 했다(but 데이터를 구조화하진 못함)
  • 실행 순서가 정해져 있어 (입력한 로직에 따라 순차적 진행) 코드의 순서가 바뀔 시 결과 값이 변경될 수 있다
  • Procedure(프로시저)와 Procedure Call(함수 호출)을 통한 추상화와 재사용성(프로시저는 수행하는 절차 그 자체를 목적으로 하는 것이다)
❗️ 장점) 비교적 설계가 쉽고, 간단한 소규모 프로젝트에 용이❓ 단점) 오래된 방식이며 유지보수의 어려움이 있어 대형 프로젝트에 부적합

1-2. 객체지향 프로그래밍 ?

절차적 프로그래밍을 보완하기 위해 나온 프로그래밍 기법프로그램을 객체(특성과 행위를 가지고 있는 자체) 단위로 나누어 객체 각각이 독립성을 가지고 있다문제를 여러개의 객체단위로 나누어 처리하는 방식

  • 작은 문제들을 해결하는 객체를 생성한 뒤, 이를 조합해 큰 문제를 해결함(Bottom-Up 방식)
  • 변화할 수 있는것은 전부객체화 시킨다
  • 각 객체들은 다른 객체들과 독립적으로 운용된다(독립성 ⬆️ 의존성 ⬇️)
  • 객체 외부에서 접근 가능한 인터페이스를 제한하여 잘못 사용될 경우를 최소화 한다
  • 유지 보수에 용이하여 관리 비용을 낮출수 있다(프로그램 버그시 문제 되는 객체만 수정하고 객체를 사용하는 코드는 수정하지 않아도 된다)
❗️ 장점) 많이 사용되는 설계방식이며, 보안성이 높고 대형 프로젝트에 적합함❓ 단점) 객체가 많아지면 용량이 커져 속도가 느려지며, 설계가 어렵다

2. 선언형 프로그래밍 ?

명령형 프로그램과 반대되는 개념컴퓨터가 수행할 목표만 명시하는 것 (행동에는 관심이 없음)

(WHAT)무엇을 할것인가? 케이크 2개 만들어줘!

2-1. 함수형 프로그래밍 ?

프로그래밍의 계산을 수학적 함수의 조합으로만 생각한다

  • 함수를 순수함수로 구성한다
  • 모든것이 객체이다
  • 코드를 간결하게 구현할 로직에 집중한다
  • 동시성을 안정하게 보장한다

2-2. 반응형 프로그래밍 ?

함수형에서 더 나아가 비동기 데이터 흐름에 기반을 둔 프로그래밍 패러다임이다

  • 다수의 비동기 이벤트를 효과적으로 처리할 수 있다
  • 함수형 프로그래밍 패러다임의 도구들을 자유롭게 활용하여 데이터 흐름을 제어한다
  • 데이터의 흐름을 관찰, 필터링, 데이터간의 병합이 가능하다
  • 데이터를 일일히 추척해 컨퓨터의 성능을 저하시킨다

0개의 댓글