[Study] OOP와 FP

조혜인·2022년 8월 25일
0
post-thumbnail

📌 OOP(Object Oriented Programming)

  • Class와 Object에 기반한 디자인 패턴이다.
  • 연관된 데이터들끼리 Class로 묶어주고 그 안에서 Object instance를 만들어 프로그래밍해준다.

장점

  • 코드의 재사용률을 높이고 코드를 간결하게 함으로써 유지보수가 쉽다.
  • 데이터의 캡슐화 혹은 추상화를 통하여 안전하게 보존시킬 수 있다.

대표적인 언어

  • C++, Java, Javascript, Python 등의 객체제향적인 언어들

캡슐화(Encapsulation)

  • Class의 내부 변수와 메소드를 하나로 패키징한다고 보면 된다.
  • 객체의 내부 로직을 감추고 외부에는 상대적으로 안정적인 부분만을 공개하여 데이터를 안전하게 보존한다.
  • 외부에서 접근할 때에는 반드시 정해진 메소드를 통해 상호작용할 수 있도록 한다.
  • 마치 우리가 종종 섭취하게 되는 알약과 같이 필요한 데이터 혹은 밀접한 데이터들을 한 알약 속에 가둔다고 볼 수 있다.

추상화(Abstraction)

  • 공통점을 찾아 Class로 묶어주고 복잡한 디테일을 제거함으로써 단순하게 만든다.
  • 즉, 불필요한 코드를 제거하고 중요한 부분을 살린다.
  • 위의 예시를 보면, 우리는 아우디, 벤츠, 현대 등 다양한 차들을 볼 수 있다. 그런데 이 차들은 모두 '자동차'라는 하나의 객체에서부터 파생되었다. 이 때의 '자동차'라는 객체를 추상화된 객체라고 보면 된다.

📌 Functional Programming

  • Functional Programming은 부작용이 없는 순수한 함수를 구현하는 디자인 패턴이다. 여러 개의 작은 함수들을 엮어 큰 함수를 구현하고 불변성을 지키게 된다.

장점

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

대표적인 언어

  • Clojure, Swift, Haskell, Scala 등
  • 위 언어들을 사용해본 경험이 없어 다소 이해도가 낮다.

고차함수

  • FP와 같은 함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해 더 큰 함수를 만들어간다.
  • 함수의 파라미터로 함수를 전달할 수 있고, 함수의 반환값으로 함수를 사용할 수 있다.(이전에 swift를 잠깐 공부했었는데, 파라미터로 함수를 전달하고 반환값으로 함수를 받는 코드를 보고 굉장히 놀란 적이 있다!!🫢)

불변성

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

순수함수

  • 동일한 Input에는 항상 같은 값의 Output을 반환해야한다.
  • 부작용 즉, side effect가 없어야한다.
profile
코딩은 역시 재밌군

0개의 댓글