프로젝트를 하다가 Stream API 를 써봤는데 좋은거 같아서 이참에 한번 정리해보려고 글을 씁니다.
제목은 OOP가 더 안좋은 것 처럼 써놨는데 둘이 상호 보완적인 관계입니다.
제목 재밌게 쓰고 싶어서 그랬숩니다...
OOP는 Object Oriented Programming의 약자로 객체지향 프로그래밍을 뜻합니다.
OOP는 관련된 데이터끼리 묶어 class를 형성하고 instance를 만듬으로써 프로그램을 디자인 해줍니다.
✔️장점
코드의 재사용률을 높인다.
-상속을 사용하면 코드의 재사용률을 높일 수 있습니다.
유지 보수가 쉽다.
-캡슐화를 사용하면 주변 코드에 영향이 적기 때문에 유지보수가 용이합니다.
생산성이 향상된다.
-잘 만들어진 객체를 여러곳에서 활용함으로써, 개발의 생산성을 향상할 수 있습니다.
✔️단점
실행 속도가 느립니다.
-상속을 사용하면 코드의 재사용률을 높일 수 있습니다.
프로그램 용량이 크다.
-객체를 많이 만들다보면, 불필요한 정보들이 같이 삽입될 수 있습니다.
설계에 많은 시간 소요됩니다.
-클래스, 객체, 상속의 구조를 설계해야 하기 때문에, 설계단계부터 많은 시간이 소모됩니다.
✔️특징
캡슐화
한 객체가 하나의 목적을 위해
필요한 데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 의미합니다.

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

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

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

FP는 Functional Programming의 약자로 계산을 수학적 함수의 평가로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다.
뭔 소린지 잘 이해가 안가시죠? 좀 더 쉽게 설명해드리겠습니다.
함수형 프로그래밍은 계산을 할때 함수를 사용합니다.
이 방식은 마치 수학 시간에 수식을 계산하는 것과 비슷합니다.
예를 들어, 우리가 덧셈을 하는 함수가 있다고 생각해보겠습니다.
이 함수는 숫자를 두 개 받아서 더한 값을 돌려줍니다.
이 함수를 호출하면 항상 같은 결과를 얻을 수 있습니다.
함수형 프로그래밍에서는 문제를 작은 조각으로 나누어서 해결합니다.
이 작은 조각들은 함수로 구성되어 있고, 각각의 함수는 특정한 계산을 담당합니다.
이렇게 작은 함수들을 조합해서 더 큰 함수를 만들 수 있습니다.
함수형 프로그래밍에서는 함수가 값이 변하지 않도록 만듭니다.
함수는 입력에 대해 항상 같은 결과를 내놓고, 외부에 아무런 영향을 주지 않습니다.
이런 특징 덕분에 코드를 이해하기 쉽고, 문제를 예측할 수 있습니다.
함수형 프로그래밍은 코드를 작은 조각으로 쪼개서 각각을 테스트하고 디버깅하기 쉽게 만들어줍니다. 또한, 병렬로 처리하거나 최적화하는 것도 쉽게 할 수 있습니다.
간단히 말하자면, 함수형 프로그래밍은 계산을 할 때 함수를 사용하는 방법입니다.
작은 함수들을 조합해서 문제를 해결하며, 함수는 항상 같은 결과를 내놓고 외부에 영향을 끼치지 않게됩니다. 이런 방식은 코드를 이해하기 쉽고, 문제를 예측할 수 있게 만들어줍니다.
✔️장점
예측 가능하고 안정적인 코드
-함수형 프로그래밍은 입력에 대해 항상 같은 결과를 반환하고, 외부 상태에 영향을 미치지 않습니다.
이로 인해 코드의 동작을 예측하기 쉽고, 버그를 줄여 안정적인 소프트웨어를 개발할 수 있습니다.
병렬 처리
-함수형 프로그래밍은 상태 변화를 최소화하고 데이터를 불변으로 다루는 특징이 있습니다.
이는 여러 함수들이 동시에 실행될 수 있는 병렬 처리를 용이하게 만들어줍니다.
왜냐하면, 함수가 외부 상태에 의존하지 않고 입력만으로 결과를 계산하기 때문에 동시에 여러 함수를 실행해도 안전하고 예측 가능한 결과를 얻을 수 있습니다.
모듈화와 재사용성
-작은 함수들을 조합하여 더 큰 함수를 만들 수 있으며, 이렇게 모듈화된 함수들은 재사용성이 높습니다. 또한, 함수들을 쉽게 테스트하고 디버깅할 수 있어 코드 유지보수가 편리합니다.
✔️단점
성능 문제
-불변성과 함수 조합성은 함수형 프로그래밍의 강점이지만, 때로는 성능에 영향을 줄 수 있습니다. 특히 대용량 데이터를 다루거나 반복적인 계산이 필요한 경우에는 추가적인 고려가 필요할 수 있습니다.
제한된 상태 변화
-함수형 프로그래밍은 상태 변화를 제한하고 불변성을 강조합니다.
그러나 모든 문제에 있어서 상태 변화를 완전히 제거할 수는 없습니다.
때로는 상태 변화가 필요한 경우가 있을 수 있습니다.
일단 함수형 프로그래밍이 뭔소린지 이해하는데 한참 걸렸다... 일단 어느정도 이해는 한것 같은데 경험이 더 많아야 할것 같습니다 다음 시간에는 함수형 프로그래밍중 Stream API에 대해 더 알아보고자 합니다.
좋은 글이네요. 공유해주셔서 감사합니다.