ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] OOP & FP
    JavaScript 2022. 7. 5. 00:01
    728x90

    OOP

    OOP는 Object Oriented Programming의 약자로 객체지향 프로그래밍을 뜻합니다.

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

    OOP의 장점

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

    대표적인 언어

    • C++, Java, Python, Javascript

    OOP의 특징

    1) Encapsulation(캡슐화)

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

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

    장점

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

    예시

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

    2) Abstraction(추상화)

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

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

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

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

    장점

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

    Inheritance(상속)

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

    장점

    • 코드의 재사용성 증가

    Polymorphism(다형성)

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

    Method overriding

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

    Method overloading

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

    FP (Functional Programmin)

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

    • side effect : 부작용
    • pure function : 순수 함수

    장점

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

    대표적인 언어

    • Clojure, Swift, Haskell, Scala

    특징

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

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

    고차 함수 (Higher Order Function)

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

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

    불변성(Immutablility)

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

    순수함수(Pure function)

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

    참고

    [Javascript]OOP vs FP

    https://koras02.tistory.com/172

    728x90

    'JavaScript' 카테고리의 다른 글

    [JavaScript] 전역 변수의 문제점  (0) 2022.07.08
    [JavaScript] 스코프  (0) 2022.07.07
    [JavaScript] Jest로 기본적인 테스트 작성  (0) 2022.07.04
    [JavaScript] 함수  (0) 2022.07.01
    [JavaScript] 원시 값과 객체의 비교  (0) 2022.06.29

    댓글

Designed by Tistory.