OOP vs FP 에 대하여..

2024. 11. 12. 11:42·CS

객체지향 프로그래밍과 함수형 프로그래밍

 

https://gracefulsoul.github.io/paradigm/oop/

 

첫번째,

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 말 그대로 프로그램을 객체(Object)들의 집합으로 구성하는 방법이다.

 

데이터와 해당 데이터를 조작하는 함수를 객체 단위로 묶는다. 각각의 객체는 데이터와 함께 관련된 동작을 가지고 있고, 서로 상호작용하며 프로그램을 구성한다. 이때 객체의 속성(데이터)과 동작(메서드)을 정의하는 단위를 ‘클래스(Class)’라고 부른다.

 

이렇게 한번 정의해 둔 클래스는 언제든지 호출해서 쓸 수 있다. 때문에 객체지향 프로그래밍은 코드 재사용성이 높고, 대규모 프로젝트에서의 코드 유지 보수나 확장에도 이점이 있죠. C++과 C#, Java(자바), Python(파이썬) 등이 대표적인 객체지향 언어이다.

 

 

 

<객체지향 설계의 특징 4가지>

- 캡슐화 (Encapsulation)

데이터의 구조와 역할, 기능(메서드)을 하나의 캡슐 형태로 묶는 개념이다. 클래스 내부에서만 데이터에 접근할 수 있도록 정보를 은닉하고, 외부에 영향을 받지 않고 객체 내부 구현을 변경할 수 있도록 함으로써 유지보수성을 높인다.

- 추상화 (Abstraction)

데이터나 프로세스 등을 특성에 따라 따로 묶어 정의하는 과정이다. 목적에 불필요한 부분을 제거하고 객체들의 공통적인 특징이나 특정한 성질만을 정의함으로써 코드를 단순화하고 프로그램의 유연성을 향상시킨다.

- 상속 (Inheritance)

하나의 자식 클래스가 상위에 있는 부모 클래스의 속성과 동작을 물려받는 개념이다. 기존 클래스를 확장하거나 변경하지 않고도 새 클래스를 쉽게 정의할 수 있어 코드 재사용성이 높아지고, 클래스 간 계층 관계를 구조적으로 형성할 수 있다.

- 다형성 (Polymorphism)

하나의 변수나 함수가 상황에 따라 다른 의미로 해석되어 동작할 수 있게 하는 성질이다. 동일한 인터페이스를 쓰면서도 객체의 타입에 따라 여러 다른 기능을 제공하게 함으로써 객체 간의 상호작용을 손쉽게 구현하고 코드 유연성을 높이는 역할을 한다.

 

 

 

https://www.inflearn.com/pages/infcon-2023-tech-oopfp

 

 

두번째,

함수형 프로그래밍은 부작용을 최소화하고 데이터의 불변성을 강조하는 프로그래밍 패러다임이. 이는 프로그램의 예측 가능성과 테스트 용이성을 높이는 데 기여합니다.

 

순수 함수 (Pure Function):

순수 함수는 같은 입력값에 대해 항상 같은 출력값을 반환하며, 함수 외부의 상태를 변경하지 않는다. 예를 들어, 입력값을 두 배로 반환하는 함수는 그 어떤 상태도 변경하지 않기 때문에 순수 함수이다.

 

불변성 (Immutability) : 이미 저장된 값의 상태를 변경하지 않는다.

데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 해당 데이터의 복사본을 만들어서 그 일부를 변경하고 변경한 복사본을 사용해 작업을 진행한다.

 

 

1급 객체와 고차 함수(First-Class, Higher-order functions)

- 함수형 프로그래밍에서 1급 객체의 특징은 다음과 같습니다.

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달할 수 있다.
  • 반환 값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

- 또한, 고차 함수의 속성을 가져야 하는데, 고차함수의 특징은 다음과 같습니다.

  • 함수를 인자로써 전달할 수 있어야 한다.
  • 함수의 반환 값으로 또 다른 함수를 사용할 수 있다.

 

객체 지향과 함수형 프로그래밍의 조화

 

결론적으로 객체 지향 프로그래밍과 함수형 프로그래밍은 서로 대립되는 개념이 아니라, 서로 보완적인 관계이다.

 

현대의 많은 프로그래밍 언어와 프레임워크는 이 두 패러다임을 조화롭게 사용할 수 있는 기능을 제공한다.

예를 들어, 자바는 전통적으로 객체 지향 언어이지만, 자바 8부터는 람다 표현식과 스트림 API를 통해 함수형 프로그래밍의 개념을 도입하였다. 이를 통해 개발자는 객체 지향의 구조적인 장점과 함수형 프로그래밍의 표현력과 간결성을 동시에 활용할 수 있게 되었다.

 

객체 지향 프로그래밍과 함수형 프로그래밍의 조화는 소프트웨어 개발의 다양한 문제에 대해 더 유연하고 효율적인 해결 방법을 제공한다.

개발자는 상황에 따라 적절한 패러다임을 선택하고 조합함으로써, 더 나은 소프트웨어를 만들 수 있다.

 

저작자표시 비영리 변경금지 (새창열림)

'CS' 카테고리의 다른 글

[로드밸런싱] Load Balancing이란? 서버 부하 분산의 방법  (0) 2025.05.03
[JWT] 토큰 인증에 대하여  (1) 2025.02.28
시간복잡도(Time Complexity) & 공간복잡도(Space Complexity)  (0) 2024.12.05
쿠키(Cookie)와 세션(Session)의 기본 개념  (0) 2024.10.13
[Network] CORS란? 개념과 동작 방식  (0) 2024.09.09
'CS' 카테고리의 다른 글
  • [JWT] 토큰 인증에 대하여
  • 시간복잡도(Time Complexity) & 공간복잡도(Space Complexity)
  • 쿠키(Cookie)와 세션(Session)의 기본 개념
  • [Network] CORS란? 개념과 동작 방식
창MIN
창MIN
  • 창MIN
    미니의 코드
    만들고 도전하는것을 좋아합니다💻
  • Guest
    Gmail
    GitHub
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • Google Cloud (6)
      • NodeJS (3)
      • NestJS (1)
      • Python (1)
      • DB (1)
      • Docker & Kubernetes (1)
      • Server & Infra (3)
      • CS (7)
      • Algorithm (2)
        • 개념 (2)
        • 문제 (0)
      • 개발 (0)
  • 인기 글

  • 태그

    쿠키와 세션의 개념
    Secret Manager
    google api gateway
    cloud logging
    서버 부하
    redoc
    cors 작동
    버킷 cors
    서버 부하 분산
    알고리즘
    nodejs
    Cloud Storage
    signed url
    typeScript
    cors 개념
    cloud buckets
    Google Cloud
    파일 무결성
    Cloud Function
    Cors
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
창MIN
OOP vs FP 에 대하여..
상단으로

티스토리툴바