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

백괴·2021년 12월 30일
1

자바스괴립트

목록 보기
4/5
post-thumbnail

잘못 된 내용에 대한 지적은 언제든 환영입니다.

객체 지향형 프로그래밍

  • 프로그래밍 페러다임의 종류 중 하나로, 명령형 프로그래밍에 속한다.
    • How(어떻게)에 초점을 두었다. 즉, 원하는 목적을 달성하기 위한 과정을 중요시하는 프로그래밍이라고 할 수 있다.
    • 작동에 필요한 알고리즘을 제어문상태 변화로 표현한다.
  • 객체를 정의하고 각각의 객체에 대한 역할을 부여하며, 객체끼리 서로 상호작용을 통해 로직을 이룬다.

객체 지향 프로그래밍의 네가지 특징

  • 상속 : 부모의 상태와 메소드에 접근할 수 있다.
  • 캡슐화 : 은닉화라고도 부르며, 객체의 상태나 메소드를 외부에서 접근할 수 없는 것을 의미한다.
  • 추상화 : 실행 대상 객체의 공통적인 특징을 도출하는 것을 말한다.
    👉 객체 지향 언어에서 클래스를 정의하는 것 자체를 추상화라고 할 수 있다. 예를 들어, 사자/토끼/고양이 인스턴스는 모두 숨쉬기/걷기/먹기 같은 동작을 하는 동물이라는 클래스로 묶을 수 있다.
  • 다형성 : 약간 다른 동작을 하는 메소드를 동일한 이름으로 호출하는 것을 의미한다.
    👉 부모로부터 상속받은 메소드를 덮어씌워서, 약간 다른 동작을 하는 메소드를 자식 클래스에 정의하더라도 해당 메소드명으로 호출하면 부모든 자식이든 해당 이름의 메소드가 호출된다.

객체 지향 프로그래밍의 장/단점

  • 장점
    - 프로그래밍 생산성 향상 : 이미 만들어진 객체를 상속을 받아 인스턴스를 만들어 낼 수 있기에 생산성이 향상된다.
    • 보안 향상 : 캡슐화로 인한 상태 및 데이터 은닉으로 보안성이 향상된다.
  • 단점
    - 느린 속도 : 캡슐과의 격리 구조로 인해 절차지향에 비해 속도가 느리다.

함수형 프로그래밍

  • 프로그래밍 패러다임의 종류 중 하나로, 선언형 프로그래밍에 속한다.
    - What(무엇을)에 초점을 두었다. 즉, 원하는 목적에 대한 선언을 중요시하는 프로그래밍이라고 할 수 있다.
    • 작동에 필요한 알고리즘은 코드만 보고는 알 수 없으며, 제어문의 사용과 상태 변화를 억제하여 부수 효과(side-effect)를 방지한다.
  • 순수 함수(부수 효과가 없는 함수)와 보조 함수의 조합을 통해, 부수 효과를 피하는 방향으로 로직을 이룬다.

함수형 프로그래밍의 장/단점

  • 코드 예측의 편리성 : 상태 변화가 없는 불변성을 지향하기 때문에, 코드 예측이 간편해진다.
  • 간결한 코딩 : 간결한 구조의 프로그래밍에 유리하다.
  • 높은 수준의 추상화 : 추상화를 객체들의 공통적인 특징을 도출하는 것이라고 정의할 수도 있으나, 복잡한 것을 단순화한다는 의미 또한 될 수 있다. 함수형 프로그래밍은 복잡한 알고리즘을 단순한 함수의 조합으로 표현한다.

References
"객체 지향" .incodom
"객체지향개발(OOP) 개념 정리" .shaking
"기존의 사고 방식을 깨부수는 함수형 사고" .Evan Moon

0개의 댓글