선언형 프로그래밍에서는 객체내에서 값이 바뀌는것을 허용하지 않는다 고급진 말로 **불변객체**라 한다중간에 *로직에따라 객체의 값이 바뀔 수 있으면* 예기치못한 에러가 발생하거나 디버깅을 해야하는 상황에서 많은 애로사항을 가져다 준다고 한다.실제로 코드에서 에러가난 상황들을 github에서 통계를 냈을 때, 함수형 언어가 눈에 띄게 통계치가 적게 나오기도 헀다
반복, 조건, 순환 구조 등이 언어 자체나 라이브러리에 내장되어 있어 프로그래머가 명시적으로 처리할 필요 없음
예를 들어 SQL에서 쿼리를 작성할때 따로 반복을 명시하지 않아도 모든 행 처리가능
함수형 프로그래밍
선언형 프로그래밍의 대표적인 방식으로, 순수함수와 고차 함수 등을 활용하여 코드 작성
부작용, 부수효과 등을 피하고, 함수 간 조합을 사용하여 문제 해결
각 프로그래밍의 대표적인 언어
명령형 프로그래밍
C: 전통적인 절차지향형 명령형 프로그래밍 언어, 시스템 프로그래밍에 자주 사용되며 메모리 관리와 같은 저수준 작업을 직접 제어할 수 있다
C++: C의 확장 언어로 객체 지향 프로그래밍 기능을 추가했지만, 여전히 명령형 프로그래밍의 강력한 제어력을 가지고 있다
Java: 객체지향 프로그래밍 패러다임을 기반으로 설계되었으며, 명령형 프로그래밍의 특징을 기본적으로 따른다. 객체와 클래스 개념을 중심으로 하지만, 명령어 기반의 제어 흐름과, 상태 변화를 명확하게 관리할 수 있다
Python: 명령형 프로그래밍 스타일을 지원하며, 간결하고 읽기 쉬운 구문으로 절차적인 코드를 쉽게 작성할 수 있다. 제어흐름, 상태 변화 등을 명확하게 표현할 수 있으며, 데이터 분석, 웹개발, 자동화스크립트에 널리 이용된다
선언형 프로그래밍
SQL: 데이터베이스 관리에서 사용하는 선언형 언어이다. 데이터 조회, 삽입, 갱신, 삭제에서 “어떻게” 보단 “무엇을” 수행할 지를 기술한다
HTML: 웹페이지의 구조와 내용을 정의하는 마크업 언어이다. 웹 요소를 선언적으로 기술하고, 사용자 인터페이스를 정의하는데 사용된다
Haskell: 순수 함수형 프로그래밍 언어로, 선언형 프로그래밍 패러다임을 엄격하게 따른다. 불변성, 고차함수, 순수함수 등을 강조하며, 복잡한 수학 계산이나 데이터 처리를 위한 도구로 자주 사용된다
Clojure: Lisp 계열의 함수형 프로그래밍 언어로, JVM에서 실행된다. 불변성, 재귀, 고차함수 등을 강조하며 비동기 프로그래밍, 데이터 변환 작업에 자주 사용된다
OOP 와 FP의 비교
상태관리: OOP는 상태를 객체 내부에 감싸서 관리하는 반면, FP는 상태 변화를 최소화 하고, 변화가 있을때마다 새로운 상태를 생성한다
코드 구조화: OOP는 객체와 클래스를 사용해 프로그램을 구조화하고, FP는 함수를 중심으로 프로그램을 구조화 한다
재사용성: OOP는 상속과 다형성으로 코드의 재사용성을 높히는 반면, FP는 고차함수와 함수 합성을 통해 재사용성을 극대화 시킨다
추상화 수준: 보통 FP가 OOP보다 추상화 수준이 높아, 더 간결하고 더 가독성 높은 코드를 작성할 수 있지만, 이는 종종 이해하기 힘들 수 있다
두 프로그래밍 방식은 상호 베타적이지 않고 함께 사용하여 더욱 강력하고, 유연한 코드를 작성할 수 있다.
현대의 프로그래밍에서는 이러한 두 패러다임을 적절히 혼합하여 사용함으로써 각각의 장단점을 보완하여 코드르 작성하는 것이 중요하다.
title: 참고 블로그[\[프로그래밍 패러다임\] 객체지향 프로그래밍(OOP)](https://velog.io/@dbworud/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DOOP)[\[CS/Basic\] 좀 더 나은 프로그램을 위해, 프로그래밍 패러다임](https://iosdevlime.tistory.com/entry/CSBasic-%EC%A2%80-%EB%8D%94-%EB%82%98%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%9C%84%ED%95%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84)[함수형 프로그래밍이란? | JONGMINFIRE.DEV](https://jongminfire.dev/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80)[50. 함수형 프로그래밍의 특징과 장점](https://yoondii.tistory.com/124)