명령형 프로그래밍
- Imperative Programming
How
에 초점
- 원하는 목표를 달성하기 위해 수행해야하는 단계를 명시적으로 기술
- 순차적인 지시 (컴퓨터에게 명령 내리는 것과 유사)
- 예시
- 특징
- 알고리즘의 각 단계 명확히 정의
- 상태 변화 추적 → 어떻게 실행될 지 제어
- 프로그램 상태 추적 필요 → 복잡
- 언어 :
C
C++
Java
Python
선언형 프로그래밍
- Declarative Programming
What
에 초점
-
원하는 결과 정의
-
결과를 달성하는 방법은 시스템에 위임
→ 개발자는 결과에 대한 명세만 제공
- 예시
- 특징
- 프로그램의 상태 변화 최소화
- 코드 의도 더 명확하게
- 높은 유지보수성, 가독성
- 성능 최적화 어려움
- 언어 :
SQL
HTML
Prolog
함수형 프로그래밍
- Functional Programming
- 선언형 프로그래밍의 한 형태
- 불변성 Immutability
-
한 번 생성된 데이터는 변경 X
-
변화가 필요한 경우 새로운 데이터 생성
→ 예측 가능성, 안정성
- 순수함수 Pure Functions
-
주어진 입력에 대해 항상 동일한 출력 반환
-
외부 상태에 영향 X
-
side effect X
→ 테스트 및 디버깅 용이, 예측 가능성
- 언어 :
Haskell
Scala
Clojure
F#
어떤 방식을 지향해야 하는가?
- 프로그래밍 패러다임을 선택할 때는 애플리케이션의 요구 사항, 개발 팀의 경험, 프로젝트의 복잡성 등 다양한 요소를 고려 필요
- 성능이 중요한 시스템 : 하드웨어와 밀접한 명령형 언어가 유리할 수 있음
- 유지 보수와 확장성이 중요한 애플리케이션 : 선언형 또는 함수형 언어가 코드의 명확성과 안정성을 향상시키는 데 도움을 줄 수 있음
→ 적절한 도구와 패러다임의 선택은 프로젝트의 성공에 큰 영향을 미칠 수 있으므로, 프로젝트의 요구에 가장 잘 맞는 방식을 잘 판단하여 선택하는 것이 중요