프로그래밍 패러다임과 역사와 프론트엔드의 패러다임

yoon Y·2022년 8월 25일
0

프로그래밍 패러다임과 역사

1. 기술 발전의 사이클

  1. 문제인식
  2. 문제를 해결하는 새로운 기술이 등장하고 이름 명명됨
  3. 기술의 부흥
  4. 새로운 한계점 봉착

→ 싸이클 반복

2. 패러다임 연대기

순차적 프로그래밍과 goto

  • 원시타입 데이터와 for, while만으로 순차적으로만 프로그래밍.
  • 함수가 없기 때문에 특정 구간을 반복하려면 goto를 이용해 실행 순서 변경.

절차적 프로그래밍 (c언어)

  • 함수가 등장.
  • 실행순서 바꾸는 것이 아닌 반복되는 코드를 따로 보관.
  • 코드를 실행하다가 특정 함수로 가서 코드를 실행시킨 후 다시 기존 위치로 돌아와 다시 진행.
  • 함수 단위로 코드를 분리하고 재사용하는 형태의 프로그래밍.

구조체 등장 (c언어)

  • 관련 데이터를 그룹으로 묶어 관리하는 구조체 등장.
  • 네임 스페이스와 중복 코드를 줄이고 효율적으로 프로그래밍 가능.

객체 지향 프로그래밍_v1 (c++)

  • 데이터만 묶는 것 보다 관련 함수까지 같이 묶는게 더 편함 → c++의 class등장.
  • 데이터와 함수가 같이 묶인 데이터 형식인 객체(class의 반환 값) 등장.
  • class를 상속해 재사용하며 객체 지향 프로그래밍 개념 시작.

객체 지향 프로그래밍_v2 (Java)

  • 다량의 객체를 쉽고 효율적으로 만들 필요성을 느낌.
  • 작은 부품(객체)를 미리 만들어두어 조립하고 결합하는 방식으로 개발하자는 진정한
    객체 지향 프로그래밍 개념 정립.
  • 자바의 Class는 c언어의 class보다 객체지향적 특징인 추상화, 캡슐화, 상속, 다형성과 관련한 기능이 더 추가되어있다는 차이가 있음.

js가 왜 함수형 언어인지?

JavaScript는 함수형 프로그래밍에 필요한 가장 중요한 기능을 가지고 있기 때문.

  • first class 함수: 함수를 값으로 사용하는 기능으로 함수를 인수로 전달하고, 함수를 반환하고, 함수를 변수 및 객체 속성에 할당
  • 람다 구문: 간결한 람다lambda는 고차원 함수로 작업하기가 더 쉽다.
  • 클로저

js에는 없는 함수형 언어의 기능들

  • 순수 : 부수효과가 발생할 수 있는 표현식은 허용되지 않아야한다. -> 코딩 컨벤션으로 해결해야함
  • 불변성: 기존 데이터 구조 (예 : 배열 또는 객체)를 변경하는 대신 표현식은 새로운 데이터 구조를 생성해야한다. -> 외부 라이브러리나 es6문법 사용해야 함(const, object.freeze)
  • 재귀 : FP 언어에서 재귀는 반복작업을 수행 할 수있는 유일한 방법이어야 한다.(for, while X) -> es6의 꼬리호출최적화 사용(브라우저가 많이 지원 안함.)

OOP와 FP의 차이? 프론트엔드에서의 OOP와 FP란?

OOP는 코드를 객체를 이용해 분리하고, FP는 함수를 이용해 분리한다.
자바는 객체지향언어여서 OOP를 주로 하고, js는 멀티 패러다임이어서 OOP도, FP도 할 수 있다.
하지만 설계 구조를 OOP로 하고 로직 구현은 FP로 하는게 가장 이상적이다.
리액트의 클래스 컴포넌트는 객체지향과 가깝고, 함수 컴포넌트와 훅은 FP에 가깝다.

디자인 패턴이란? 리액트의 디자인 패턴과의 차이점?

일반적인 디자인 패턴과 리액트의 디자인 패턴은 의미하는게 다르다.
디자인 패턴은 OOP을 할 때 재사용성을 위해 클래스와 인스턴스를 어떻게 다루는지에 대한 방법들을 말한다.
리액트의 디자인 패턴은 컴포넌트를 재사용하기 위한 설계 구조를 말하는 것.

자바스크립트에서 객체지향을하는게 맞나요?

profile
#프론트엔드

0개의 댓글