[Javascript]OOP vs FP

Suyeon·2020년 10월 5일
2

Interview prep

목록 보기
6/22
post-thumbnail

OOP

Object Oriented Programming의 약자로써 class와 object에 기반한 프로그래밍 패러다임(디자인 패턴) 이다. 관련된 데이터끼리 묶어서 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을 디자인한다.

  • Imperative (명령형): how to solve

장점

  • 코드의 재사용률을 높이고 코드를 간결하게 함으로써 유지보수가 쉽다.(DRY principle)
  • 데이터를 안전하게 보존할 수 있다.(encapsulation와 abstraction등)

대표적인 언어

  • C++, Java, Python, Javascript

✨ Features

Encapsulation(캡슐화)

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

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

장점

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

예시

  • Closure
  • 함수 구현
  • Module pattern

Abstraction(추상화)

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

예를들면, 페이 기능을 구현한다고 했을 때, 네이버페이, 카카오페이등은 모두 작동하는 방식은 다르지만 결제를 한다는 공통된 기능을 가지고 있다. 이 때 "공통된 기능"으로 하나로 묶는 방법이라고 할 수 있다. (공통된 클래스로부터 상속)

추상화는 "모델링"이며 구체적인 것을 상세히 하지 않고 필요성에 의한 특성만을 가지고 구성하는 것을 말합니다. 코드상에서는 동작의 구현을 제외한 선언하는 부분에 해당하며 "설계"하는 부분을 말합니다.

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

장점

  • 유지보수가 쉬움
  • 가독성의 증가

Inheritance(상속)

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

장점

  • 코드의 재사용성 증가

Polymorphism(다형성)

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

Method overriding

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

Method overloading

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

Functional Programming

side effect가 없는 pure function을 구현함으로써 프로그램을 디자인한다. 여러개의 작은 function을 엮으며 하나의 큰 function을 구현하고 불변성을 지키게 됨.

  • declarative(선언형): what to solve

장점

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

대표적인 언어

  • Clojure, Swift, Haskell, Scala

✨ Features

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

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

고차 함수 (Higher Order Function)

함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해서 더 큰 함수를 만들어나간다. 함수를 엮기위해서 HOC를 활용해야 한다.

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

불변성(Immutablility)

데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터를 복사본을 만들어 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.

순수함수(Pure function)

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

0개의 댓글