
프로그래밍이란
문제를 해결하기위해 프로그램을 만드는 것을 의미합니다.
개발자는 문제를 코드로 옮기며 여러가지 방식으로 접근 할 수 있는데,
이 때, 사고 방향과 코드구조에 대한 철학을 "프로그래밍 패러다임"이라고 합니다.
이 글에서는 프로그래밍 패러다임 중 함수형 프로그래밍과 객체 지향형 프로그래밍을 보면서
자바스크립트와는 어떤 연관이 있는지 살펴보겠습니다.
객체 지향 프로그래밍 (OCP)

객체지향 프로그래밍은 절차적 프로그래밍이 대세 기법이었던 60~70년대 초에 등장한 개념입니다.
당시의 절차적프로그래밍은 프로그램을 구성하는 것은 명령어의 나열이라는 관점으로 프로그래밍을 했었는데요..
이러한 프로그래밍 방법은 프로젝트의 규모가 커질수록 유지보수가 어려워지는 문제가 있었습니다.
위 코드는 절차지향방식으로 만든 은행계좌 관리 코드입니다.
보이는 문제점을 몇가지 짚어보면 이러합니다.
- money를 누구나 접근가능
- 여려 계좌를 관리하기 힘듬
- 값이 변경되면 추적하기 어려움
위와 같이 절차적 프로그래밍의 단점을 보완하기 위해 나온것이 객체 지향 프로그램인데,
핵심적인 점은 프로그램을 단순한 명령어의 나열이 아닌 객체들의 집합으로 구성되어있다는 정의입니다.
그리고 이 객체들은 서로 상호작용하며 시스템을 구성합니다.
객체 지향 프로그래밍에서 가장 작은 단위를 클래스라고 합니다.
앞선 은행계좌 예시로 객체지향형 프로그래밍을 정리하자면 아래와 같이 사용할 수 있습니다.

객체 지향 프로그래밍은 위와 같이 역할별로 구분하여 코드를 관리할 수 있기 때문에,
유지보수가 좋고 재사용성이 좋아지며 더 직관적으로 코드를 볼 수 있습니다.
객체 지향 프로그래밍의 특징으로는 4가지가 있습니다.
1. 추상화
복잡한 내부구현을 숨기고 필요한 기능만 외부에 공개할 수 있습니다.
은행에서 입금 출금만 잘 되면 되고 입금이 계좌에 되는 원리가 무엇인지 출금의 원리는 무엇인지까지
알려주지 않아도 되는것처럼요
2. 캡슐화
관련된 데이터와 기능을 하나의 객체로 묶고 외부에서 직접 접근하지 못하게 보호하는 것 입니다.
위 예시의 객체지향 문법에서 class안에 있는 money를 직접적으로 변경할 수 없습니다.
3. 상속
기존 객체의 프로퍼티와 매서드를 물려받아 새로운 객체를 만드는 것입니다.
위 예시에서 만약 마이너스 통장을 만들거나 월마다 자동이체 되는 적금통장 같은 기능을 만들때 상속을 이용해볼 수 있곘네
4. 다형성
같은 메서드 호출이어도 객체에 따라 다르게 동작할 수 있습니다.
만약 위 코드를 적금통장으로 새로운 인스턴스를 만들었을때 이자율은 다르게 나오겠죠?
함수형 프로그래밍 (FP)
함수형 프로그래밍은 객체 지향 프로그래밍 보다 더 오래된 개념이지만,
최근들어 다시 주목을 받고있습니다.
그 이유는,멀티코어 환경에서의 병렬처리 때문인데.
여러 스레드가 동시에 같은 작업을 하면 버그가 발생하기 쉽습니다.
함수형 프로그래밍은 불변성과 순수함수로 이러한 문제를 해결합니다.

위 예시와 함께 함수형 프로그래밍의 특징을 꼽아보자면
1. 순수함수
외부 상태에 의존하거나 사이드이펙트를 내지않고, 같은 입력에 항상 같은 출력을 냅니다.
account에 얼만큼 돈이 들어오던 항상 인풋에따른 출력을 냅니다.
2. 불변성
데이터를 직접 변경하지 않고 새로운 값을 변환합니다.
spread연산자를 사용하여 원본이 아닌 새로운값으로 반환하였습니다.
3. 일급객체
함수를 값처럼 다뤄 콜백, 고차함수,클로저같은 패턴이 구현 가능합니다.
함수를 변수에 할당하고 있기도하고 함수를 인자로 넣고있습니다.
자바스크립트는 무슨 언어일까?
자바스크립트는 객체 지향 프로그래밍을 지원하지만 함수형 프로그래밍도 지원하는 멀티 패러다임 언어입니다.
자바스크립트의 객체 지향은 전통적인 클래스 기반언어와는 다르게
프로토타입 기반의 객체지향을 사용합니다.
ES6에서 class문법이 추가되긴 했지만 이는 생성자 함수의 문법적 설탕입니다.
겉으로는 클래스처럼 보이지만 실제로는 프로토타입 체인으로 동작합니다
또한 자바스크립트에서의 함수는 일급객체이기 때문에 함수형 프로그래밍도 지원합니다.
정리
객체 지향 프로그래밍과 함수형 프로그래밍은 서로 상반관계가아닌 서로를 보완하는 프로그래밍 패러다임입니다.
객체지향은 구조화와 재사용성을,
함수형은 예측가능성과 안정성을 제공합니다.
따라서 자바스크립트 개발자는 문제에 따라 두가지 패러다임을 적절히 혼합할 줄 알아야합니다
'Computer Science' 카테고리의 다른 글
| [CS] SQL - SELECT (0) | 2025.08.20 |
|---|---|
| [CS] 디바운스와 쓰로틀 (0) | 2025.07.11 |
| [CS] 선언형 프로그래밍 vs 명령형 프로그래밍 (1) | 2025.07.10 |
| [CS] 해시 테이블은 뭘까 (1) | 2025.07.03 |
| [CS] 보조기억장치와 GPU (1) | 2025.06.08 |