OOP vs FP

이주형·2022년 11월 24일
0

backend

목록 보기
24/53

객체 지향 프로그래밍(Object-Oriented-Programming)

객체의 내부 로직을 감추고 외부에는 상대적으로 안정적인 부분만을 공개함으로써 데이터를 안전하게 보존하는 기법이다. 즉, 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다. 객체지향 프로그래밍을 사용하면 코드 재사용이 쉬우며, 유지보수가 간편하고 직관적인 코드 분석이 가능한 장점이 있다.

객체 지향 프로그래밍(OOP)의 4가지 특징

1. 추상화(Abstraction)

  • 추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현합니다.
  • 사물들의 공통적인 특징, 즉 추상된 특징을 파악해 인식의 대상으로 삼는 행위를 말합니다.
  • 추상화는 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 수단입니다.

아우디와 벤츠는 모두 ‘자동차’에 해당됩니다.

따라서, 자동차라는 추상화 집합이 존재하며, 자동차들이 가진 공통적인 특징들을 하나의 집합으로 만들어 놓은 것입니다.

2. 캡슐화(Encapsulation)

캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미합니다.

  • 응집도 : 클래스나 모듈 안의 요소가 얼마나 밀접하게 관련 있는지를 나타냅니다.
  • 결합도 : 어떤 기능을 실행하는 데 다른 클래스나 모듈에 얼마나 의존하는지 나타냅니다.
  • 정보은닉 : 캡슐화는 정보은닉을 통해 높은 응집도와 낮은 결합력을 가지게 됩니다.
    • 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것입니다.
    • private 키워드를 통해 데이터를 보호해 접근을 제한합니다.

오버라이딩(Overriding)

  • 부모 클래스에서 상속받은 자식 클래스에서 부모 클래스에서 만들어진 메서드를 자신의 입맛대로 다시 재정의해서 사용하는 것을 말합니다.

오버로딩(Overloading)

  • 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념입니다.
  • 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용됩니다.

FP (Functional Programmin)

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

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

장점

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

대표적인 언어

Clojure, Swift, Haskell, Scala

특징

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

고차 함수 (Higher Order Function)

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

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

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

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

0개의 댓글