Develop/Network
객체지향 프로그래밍과 함수형 프로그래밍
DevPi
2025. 5. 27. 16:37
반응형
소프트웨어 개발에는 다양한 프로그래밍 패러다임이 존재합니다. 그 중에서도 객체지향 프로그래밍(OOP, Object-Oriented Programming)과 함수형 프로그래밍(FP, Functional Programming)은 대표적인 두 가지 방식으로 널리 사용됩니다.
이 글에서는 두 패러다임의 개념과 철학, 그리고 주요 차이점에 대해 정리해 보겠습니다. 어떤 상황에 어떤 패러다임이 적합한지 판단하는 데 도움이 될 것입니다.
객체지향 프로그래밍(OOP)이란?
객체지향 프로그래밍은 현실 세계의 사물(객체)을 코드로 모델링하는 방식입니다. 프로그램을 **데이터(상태)**와 **행동(메서드)**을 포함한 객체들의 상호작용으로 구성합니다.
핵심 개념
- 클래스와 객체: 클래스는 설계도, 객체는 그 설계도로 만든 실체
- 캡슐화(Encapsulation): 내부 구현을 감추고, 필요한 부분만 외부에 공개
- 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 정의
- 다형성(Polymorphism): 동일한 인터페이스로 다양한 구현을 사용할 수 있음
장점
- 복잡한 문제를 구조화하여 해결하기 좋음
- 유지보수 및 확장에 유리
- 객체 단위로 코드를 재사용하기 쉬움
함수형 프로그래밍(FP)이란?
함수형 프로그래밍은 수학적 함수의 개념을 기반으로 한 프로그래밍 방식으로, 데이터의 상태 변경을 지양하고, 순수 함수와 불변성을 중시합니다.
핵심 개념
- 순수 함수(Pure Function): 동일한 입력 → 동일한 출력, 부작용 없음
- 불변성(Immutability): 데이터는 변경되지 않으며, 새로운 값을 반환함
- 고차 함수(Higher-Order Function): 함수를 인자로 받거나 반환하는 함수
- 선언형 스타일(Declarative): 어떻게 보다는 무엇을 할지를 기술
장점
- 동시성, 병렬 처리에 유리
- 사이드 이펙트가 없어서 테스트 용이
- 코드가 짧고 명확해짐
객체지향 vs 함수형 – 주요 차이점
구분객체지향 프로그래밍 (OOP)함수형 프로그래밍 (FP)
중심 개념 | 객체와 클래스 | 함수와 불변 데이터 |
상태 관리 | 상태 변경 허용 | 상태 변경 지양 (불변성) |
코드 스타일 | 명령형 (imperative) | 선언형 (declarative) |
데이터 처리 | 메서드 호출 중심 | 함수 조합 중심 (map, reduce 등) |
재사용 방식 | 상속, 인터페이스 | 고차 함수, 함수 조합 |
멀티스레딩 대응 | 상태 관리가 어려움 | 부작용이 없어서 병렬처리에 유리 |
언제 어떤 패러다임을 선택할까?
상황 | 추천 패러다임 |
복잡한 상태를 가지는 비즈니스 로직 | 객체지향 프로그래밍 |
동시성/병렬성이 중요한 시스템 | 함수형 프로그래밍 |
유지보수가 오래 필요한 대규모 시스템 | 객체지향 + 일부 함수형 병행 |
데이터 중심 처리(스트림, 파이프라인 등) | 함수형 프로그래밍 |
최근에는 두 가지 패러다임을 적절히 혼합하여 사용하는 하이브리드 방식이 주류입니다. 예를 들어, Java, Kotlin, JavaScript, Python 등의 언어는 객체지향 기반이면서도 함수형 기능을 함께 지원합니다.
마무리 정리
- 객체지향은 객체 단위로 사고하고, 상태와 행동을 묶어 표현하는 방식
- 함수형은 순수 함수와 불변성을 중심으로 선언형 스타일로 코드를 작성
- 각 패러다임은 서로 다른 철학을 가지고 있지만, 목적은 유지보수성과 확장성을 높이는 데 있음
현대 개발에서는 두 방식을 잘 이해하고, 적재적소에 선택적으로 활용하는 것이 실용적인 접근입니다.
반응형