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 등의 언어는 객체지향 기반이면서도 함수형 기능을 함께 지원합니다.


마무리 정리

  • 객체지향은 객체 단위로 사고하고, 상태와 행동을 묶어 표현하는 방식
  • 함수형은 순수 함수와 불변성을 중심으로 선언형 스타일로 코드를 작성
  • 각 패러다임은 서로 다른 철학을 가지고 있지만, 목적은 유지보수성과 확장성을 높이는 데 있음

현대 개발에서는 두 방식을 잘 이해하고, 적재적소에 선택적으로 활용하는 것이 실용적인 접근입니다.

반응형