OOP가 그냥 커피라면 FP는 T.O.P야 (1)

이지훈·2023년 8월 16일

1. 개요

프로젝트를 하다가 Stream API 를 써봤는데 좋은거 같아서 이참에 한번 정리해보려고 글을 씁니다.

제목은 OOP가 더 안좋은 것 처럼 써놨는데 둘이 상호 보완적인 관계입니다.

제목 재밌게 쓰고 싶어서 그랬숩니다...

2. OOP?

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

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

2-1. OOP의 장단점 및 특징

✔️장점

  • 코드의 재사용률을 높인다.
    -상속을 사용하면 코드의 재사용률을 높일 수 있습니다.

  • 유지 보수가 쉽다.
    -캡슐화를 사용하면 주변 코드에 영향이 적기 때문에 유지보수가 용이합니다.

  • 생산성이 향상된다.
    -잘 만들어진 객체를 여러곳에서 활용함으로써, 개발의 생산성을 향상할 수 있습니다.

✔️단점

  • 실행 속도가 느립니다.
    -상속을 사용하면 코드의 재사용률을 높일 수 있습니다.

  • 프로그램 용량이 크다.
    -객체를 많이 만들다보면, 불필요한 정보들이 같이 삽입될 수 있습니다.

  • 설계에 많은 시간 소요됩니다.
    -클래스, 객체, 상속의 구조를 설계해야 하기 때문에, 설계단계부터 많은 시간이 소모됩니다.

✔️특징

  • 캡슐화
    한 객체가 하나의 목적을 위해
    필요한 데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 의미합니다.

  • 추상화
    여러 객체들의 공통적인 특징(속성과 기능)을 추출하여 정의하는 것을 말합니다.

  • 상속
    기존 상위 클래스에 기능을 가져와 재사용을 할 수 있으면서도
    새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것을 의미합니다.

  • 다형성
    한 객체가 다른 여러 형태(객체)로 재구성되는 것을 말합니다.

3. FP?

FP는 Functional Programming의 약자로 계산을 수학적 함수의 평가로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다.

뭔 소린지 잘 이해가 안가시죠? 좀 더 쉽게 설명해드리겠습니다.

함수형 프로그래밍은 계산을 할때 함수를 사용합니다.
이 방식은 마치 수학 시간에 수식을 계산하는 것과 비슷합니다.

예를 들어, 우리가 덧셈을 하는 함수가 있다고 생각해보겠습니다.
이 함수는 숫자를 두 개 받아서 더한 값을 돌려줍니다.
이 함수를 호출하면 항상 같은 결과를 얻을 수 있습니다.

함수형 프로그래밍에서는 문제를 작은 조각으로 나누어서 해결합니다.
이 작은 조각들은 함수로 구성되어 있고, 각각의 함수는 특정한 계산을 담당합니다.
이렇게 작은 함수들을 조합해서 더 큰 함수를 만들 수 있습니다.

함수형 프로그래밍에서는 함수가 값이 변하지 않도록 만듭니다.
함수는 입력에 대해 항상 같은 결과를 내놓고, 외부에 아무런 영향을 주지 않습니다.
이런 특징 덕분에 코드를 이해하기 쉽고, 문제를 예측할 수 있습니다.

함수형 프로그래밍은 코드를 작은 조각으로 쪼개서 각각을 테스트하고 디버깅하기 쉽게 만들어줍니다. 또한, 병렬로 처리하거나 최적화하는 것도 쉽게 할 수 있습니다.

간단히 말하자면, 함수형 프로그래밍은 계산을 할 때 함수를 사용하는 방법입니다.
작은 함수들을 조합해서 문제를 해결하며, 함수는 항상 같은 결과를 내놓고 외부에 영향을 끼치지 않게됩니다. 이런 방식은 코드를 이해하기 쉽고, 문제를 예측할 수 있게 만들어줍니다.

3-1. FP의 장단점

✔️장점

  • 예측 가능하고 안정적인 코드
    -함수형 프로그래밍은 입력에 대해 항상 같은 결과를 반환하고, 외부 상태에 영향을 미치지 않습니다.
    이로 인해 코드의 동작을 예측하기 쉽고, 버그를 줄여 안정적인 소프트웨어를 개발할 수 있습니다.

  • 병렬 처리
    -함수형 프로그래밍은 상태 변화를 최소화하고 데이터를 불변으로 다루는 특징이 있습니다.
    이는 여러 함수들이 동시에 실행될 수 있는 병렬 처리를 용이하게 만들어줍니다.
    왜냐하면, 함수가 외부 상태에 의존하지 않고 입력만으로 결과를 계산하기 때문에 동시에 여러 함수를 실행해도 안전하고 예측 가능한 결과를 얻을 수 있습니다.

  • 모듈화와 재사용성
    -작은 함수들을 조합하여 더 큰 함수를 만들 수 있으며, 이렇게 모듈화된 함수들은 재사용성이 높습니다. 또한, 함수들을 쉽게 테스트하고 디버깅할 수 있어 코드 유지보수가 편리합니다.

✔️단점

  • 성능 문제
    -불변성과 함수 조합성은 함수형 프로그래밍의 강점이지만, 때로는 성능에 영향을 줄 수 있습니다. 특히 대용량 데이터를 다루거나 반복적인 계산이 필요한 경우에는 추가적인 고려가 필요할 수 있습니다.

  • 제한된 상태 변화
    -함수형 프로그래밍은 상태 변화를 제한하고 불변성을 강조합니다.
    그러나 모든 문제에 있어서 상태 변화를 완전히 제거할 수는 없습니다.
    때로는 상태 변화가 필요한 경우가 있을 수 있습니다.

4. 마무리

일단 함수형 프로그래밍이 뭔소린지 이해하는데 한참 걸렸다... 일단 어느정도 이해는 한것 같은데 경험이 더 많아야 할것 같습니다 다음 시간에는 함수형 프로그래밍중 Stream API에 대해 더 알아보고자 합니다.

2개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글이네요. 공유해주셔서 감사합니다.

1개의 답글