Koras02
Koras02코딩웹
Koras02
전체 방문자
오늘
어제
  • 분류 전체보기 (299)
    • 백엔드 (59)
      • nestjs (2)
      • Ruby (3)
      • PostgresQL (11)
      • MySQL (5)
      • Haskell (7)
      • Koa (3)
      • Java (3)
      • Python (5)
      • Rust (5)
      • MongoDB (2)
      • PHP (3)
      • Spring Boot (1)
      • redis (5)
      • deno (2)
    • 웹서버 (3)
      • nginx (1)
      • Apache (2)
      • Google Web Server (0)
    • 모바일개발 (5)
      • Figma (0)
      • React Native (2)
      • swift (0)
      • Flutter (3)
      • Kotlin (0)
    • 프론트 엔드 (158)
      • HTML (34)
      • CSS (7)
      • Javascript (35)
      • Angular (0)
      • Typescript (2)
      • React (58)
      • Vue (2)
      • GIT (6)
      • GraphQL (1)
      • Doker (4)
      • Go (8)
      • svelte (1)
      • gatsby (0)
    • etc. (47)
      • Notion (0)
      • TIL (24)
      • Algorithm (17)
      • Algorithm 개념 정리 (2)
      • Wiki (3)
      • Official document (1)
    • 웹개념 (12)
    • 변수정리 (1)
    • VSCode (2)
    • 포트폴리오 분석 (2)
      • React (2)
    • os (5)
      • 윈도우 (4)
      • Mac (0)
      • 가상머신 (0)
      • linux (1)
    • 응용프로그램언어 (2)
      • C (2)
      • C++ (0)
      • C# (0)
    • 블로그 운영관련 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
글쓰기

공지사항

  • [공지사항] 개발 이슈나 공식문서 업데이트 업로드 예정입니⋯

인기 글

태그

  • html
  • mysql
  • html5
  • koa
  • Til
  • 프로그래머스
  • PostgreSQL
  • Rust
  • go
  • redis
  • CSS
  • Flutter
  • javascript
  • 데이터 타입
  • React
  • 하스켈
  • Haskell
  • 알고리즘
  • Java
  • 문자열

티스토리

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
Koras02

Koras02코딩웹

[Javascript] OOP vs FP란 무엇인가?
프론트 엔드/Javascript

[Javascript] OOP vs FP란 무엇인가?

2022. 1. 23. 23:24
728x90

OOP

Object Oriented Programming의 약자로 class와 object에 기반한 프로그래밍 페러다임(디자인 패턴) 입니다.

OOP는 관련된 데이터끼리 묶어 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을 

디자인 해줍니다.

 

OOP의 장점

  • OOP는 코드의 재사용률을 높이고 코드를 간결하게 함으로써 유지보수가 쉽다는 장점이 있습니다.(DRY pinciple)
  • 데이터를 안전하게 보존시킬 수 있습니다.(encapsolution(캡슐화)과 abstraction(추출화) 등)

대표적인 언어

  • C++, Java, Python, Javascript 등 

✨ Features

Encapsulation (캡슐화)

 캡슐화는 객체의 내부 로직은 감추고 외부에는 상대적으로 안정적인 부분만을 공개함으로써
 데이터를 안전하게 보존하는 기법입니다. 캡슐화는 외부에 영향을 주지 않고 객체 내부의 
 구현을 변경할 수 있기 때문에 내부 로직에 대한 유연함을 제공합니다.

  • Implementation: 숨길 부분
  • Interface: 공개할 부분 
  • 캡슐화는 객체의 "동작 구현"에 중점을 둠

장점

  • 데이터를 안전하게 보존할 수 있음
  • 개발자의 협업을 수월하게 함 
  • 유지보수가 쉬움
  • 가독성의 증가

예시

  • Closure (클로저)
  • 함수 구현
  • Module pattern

Abstraction (추상화)

 추상화는 공통점을 찾아 Class로 한번에 묶고 복잡한 디테일을 숨기고 핵심만 추출해나가는 형태입니다.
 구현 세부사항 대신 큰 범위의 공통된 기능 측면에서 클래스를 개발하는 것입니다.

 

예를 들어, 결제 페이 기능을 구현한다고 할때, 네이버 페이, 카카오페이등은 모두 작동하는 방식을 달라도 

결제를 한다는 공통된 기능을 가지고 있습니다. 이 때 "공통된 기능"으로 하나로 묶는 방법이라고 할 수 있습니다.

(공통된 클래스로부터 상속)

 

다실 말해 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공톡적인 특성을 파악해 필요없는 특성들은

제거해나가는 작업을 말합니다.

 

  • 추상화는 객체의 "동작, 기능" 자체에만 중점을 둠 
  • 캡슐화와 추상화는 상호 보완적임

장점

  • 유지보수가 낮음
  • 가독성의 증가

Inheritence (상속)

 상속은 프로토타입을 기반으로 부모 클래스부터 하위 클래스는 상속을 받을 수 있습니다.

상위 클래스의 모든것을 하위 클래스가 모두 이어 받는것 입니다. 즉, 부모가 자식에게 유전자를 물려주듯 부모의 특징을 자식에게 모두 물려주는 행위입니다.

 

장점

  • 코드의 재사용성이 증가
  • 기존에 작성된 클래스를 재사용할 수 있다.
  • 자식 클래스 설계 시 중복되는 맴버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서 해당 맴버를 작성하지 
    않아도 된다.
  • 프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기떄문에 유지보수가 쉬워 매우 경제적

Polymorphism (다형성)

 같은 이름을 가진 메소드라도 각 하위클래스의 상황에 맞게 다르게 구현될 수 있게 하는 것을 
 말한다. 즉 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석이 될 수 있다.

Method overriding

  • 상위 클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것이다. 상위클래스에서 
    만들어진 매서드는 하위 클래스의 상황에 따라 다시 재창조해 사용하는 것을 말한다.
  • Runtime에 이루어짐

Method overloading

  • 같은 이름의 함수를 여러개 정의하고, 파라미터의 타입과 개수를 다르게 하여 파라미터에 따라
    다르게 호출할 수 있게하는 것 
  • 메서드끼리 이름을 같지만 매개변수의 갯수나 데이터타입이 다르면 오버로딩이 적용되 메서드 이름이 
    같아도 문법 에러가 나지 않음 
  • Compile time(컴파일 타임)에 이루어짐

단점

  • 객체가 처리하려는 것에 대한 정확한 이해가 필요해 설계단계 부터는 많은 시간이 소모될 우려가 있다.
  • 객체지향언어는 대체적으로 실행속도가 느린편이다.
  • 다중 상속이 지원되는 C++같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

Funtional Programming

FP(Funtional Programming)은 Side effet(부작용)이 없는 Pure function(순수 함수)를 구현함으로써 프로그램을 

디자인 합니다. 여러개의 작은 function을 엮어 하나의 큰 function을 구현하고 불변성을 지키게 됩니다.

 

장점

  • 높은 수준의 추상화를 제공
  • 함수 단위의 코드 재사용성이 증가
  • 디버깅이 쉽다.
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬움

대표적인 언어

  • Clojure, Swift, Haskell, Scala

1급 객체 (First Object, 또는 1급 시민)

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼디 할당이 가능하다.

고차 함수 (Higher Order Function)

함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해 더 큰 함수를 만들어 갑니다.

함수를 엮기위해 HOC(고차 컴포넌트)를 잘 활용해야 합니다.

  • 함수의 파라미터로 함수를 전달할 수 있다.
  • 함수의 반환값으로 함수를 사용할 수 있다.

불변성(Immutablility)

데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고도 그 데이터를 복사본을 만들어 그 일부만 변경하고,

변경한 복사본을 사용해 작업을 진행합니다.

순수함수(Pure function)

  • 동일한 인풋에는 항상 같은 값의 아웃풋을 반환해야 함.
  • 사이드 에펙트가 없어야 함

참고 자료

 

[Javascript]OOP vs FP

OOP와 FP는 무엇인가?

velog.io

 

객체지향언어란? [특징, 장점, 단점, 종류]

★ 객체 지향 언어(客體指向言語 ) 사전적 의미 IT관련 객체 지향 프로그래밍에서 사용하는 언어로서, 객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게

radait.tistory.com

 

'프론트 엔드 > Javascript' 카테고리의 다른 글

[Javascript] Event Loop  (0) 2022.01.24
[Javascript] null과 undefined의 차이  (0) 2022.01.23
[Javascript] Javascript와 Node.js의 차이  (0) 2022.01.23
    '프론트 엔드/Javascript' 카테고리의 다른 글
    • [Javascript] 자바스크립트 엔진, V8
    • [Javascript] Event Loop
    • [Javascript] null과 undefined의 차이
    • [Javascript] Javascript와 Node.js의 차이
    Koras02
    Koras02
    현재 사용중인 언어 - next-js,react,vue, typescript

    티스토리툴바