프로그래밍 패러다임
1. 선언형 프로그래밍 & 함수형 프로그래밍
선언형 프로그래밍 (Declarative)
특징
- 어떻게가 아니라 무엇을 할지 표현
- 내부 동작은 시스템에 위임
예시
- SQL (SELECT ...)
- React JSX
- Array 메서드 (map, filter, reduce)
장점
- 코드 가독성 좋음
- 의도가 명확
단점
- 내부 동작을 제어하기 어려움
- 성능 튜닝이 제한적일 수 있음
함수형 프로그래밍 (Functional)
핵심 개념
- 순수 함수
- 고차 함수
- 불변성
- 부수 효과 최소화
순수 함수
- 같은 입력 → 항상 같은 출력
- 외부 상태 변경 없음
고차 함수
- 함수를 인자로 받거나 함수를 반환
- map, filter, reduce
장점
- 테스트 용이
- 예측 가능
- 병렬 처리에 유리
단점
- 러닝 커브
- 상태 관리가 직관적이지 않을 수 있음
연관
- React hooks, Redux
- 선언형 UI와 궁합이 좋음
2. 객체지향 프로그래밍 (OOP)
핵심 특징
추상화
- 공통된 특징만 뽑아내 모델링
캡슐화
- 내부 구현 은닉
- 접근 제어자(private, public)
상속성
- 기존 클래스 재사용
- 코드 중복 감소
다형성
- 같은 인터페이스, 다른 동작
오버로딩 / 오버라이딩
오버로딩
- 같은 이름, 다른 파라미터
- JS는 개념적으로만 존재
오버라이딩
- 부모 메서드를 자식이 재정의
- 실제 다형성 구현 핵심
SOLID 원칙
S — 단일 책임 원칙 (SRP)
- 클래스는 하나의 책임만 가져야 함
O — 개방 폐쇄 원칙 (OCP)
- 확장에는 열려 있고 수정에는 닫혀 있음
- 전략 패턴, 팩토리 패턴과 강한 연관
L — 리스코프 치환 원칙 (LSP)
- 자식은 부모를 대체할 수 있어야 함
- 상속 설계의 핵심 기준
I — 인터페이스 분리 원칙 (ISP)
- 범용 인터페이스보다 역할별 인터페이스
- 옵저버, 전략 패턴과 연관
D — 의존 역전 원칙 (DIP)
- 구현이 아닌 추상에 의존
- DI, 테스트, 확장성과 직결
장점
- 대규모 시스템에 유리
- 유지보수성, 확장성
단점
- 설계 비용 큼
- 과한 추상화는 오히려 복잡
3. 절차형 프로그래밍
특징
- 위에서 아래로 순차 실행
- 함수와 상태 중심
예시
- C
- 초기 JS 코드 스타일
장점
- 구조 단순
- 성능 예측 쉬움
단점
- 규모 커질수록 유지보수 어려움
- 상태 관리가 취약
연관
- 알고리즘 문제 풀이
- 스크립트성 프로그램
4. 패러다임의 혼합
특징
- 현대 언어 대부분은 멀티 패러다임
예시
- JavaScript
- 함수형 (map, reduce)
- 객체지향 (class, this)
- 절차형 (if, for)
- React
- 선언형 UI
- 함수형 컴포넌트
- 내부적으로는 상태 기반
장점
- 문제에 맞는 방식 선택 가능
- 현실적인 개발에 최적
단점
- 일관성 없는 코드가 되기 쉬움
- 팀 컨벤션 중요
'STUDY' 카테고리의 다른 글
| 오픈소스 (0) | 2026.01.09 |
|---|---|
| 실전 오픈소스 기여 프로젝트 (0) | 2026.01.07 |
| 디자인 패턴 (0) | 2026.01.06 |
| github (0) | 2025.12.26 |
| MDN Web Docs (0) | 2025.12.25 |