OOP vs FP

훈이·2022년 10월 20일
0
post-custom-banner

OOP란??

OOP는 Object Oriented Programming의 약자로서 객체지향 프로그래밍이라고 불린다.
객체지향 프로그래밍은 객체를 기본 컨셉으로한 프로그래밍의 패러다임을 의미하는데 패러다임은 코드의 스타일을 뜻한다. 그리고 자바스크립트에서는 객체지향 프로그래밍이 조금 다르게 작동하는데 프로토타입으로 작동한다. 자바스크립트에는 프로토타입이 있고 모든 객체는 프로토타입 객체와 연결되어 있다. 즉, 모든 객체에는 프로토타입 객체가 존재한다.
이 방식을 프로토타입 상속이라 부르며 프로토타입이 해당 프로토타입과 연결된 모든 객체들의 메소드들을 포함하고 있고 접근이 가능하다. 그리고 프로토타입의 상속은 일반적인 객체지향 프로그래밍과 다른데 프로토타입 상속은 클래스로부터 인스턴스를 상속 받는다.

OOP의 장점

  • 코드의 재사용률을 높이고 유지보수가 쉽다.
  • 캡슐화를 통해 데이터를 안전하게 보존시킬 수 있다.

OOP의 특징

캡슐화(Encapsulation)

캡슐화는 객체의 내부 로직을 감추고 외부에는 안정적인 부분만 공개한다. 외부에 영향을 주지 않고 객체 내부의 구현을 변경할 수 있다.

  • 객체의 속성과 메서드를 하나로 묶은 다음 일부를 외부에 감추어 은닉한다.
  • Implementaion : 숨길 부분
  • Interface : 공개할 부분
  • 캡슐화는 객체의 동작 구현에 중점을 둔다.

추상화(Abstraction)

추상화는 Class의 공통점을 찾아서 한번에 묶고 복잡한 디테일을 숨긴 뒤 핵심만 추출해 나간다.

  • 복잡한 시스템에서 핵심적인 개념이나 기능을 간추려낸다.
  • 추상화는 객체의 동작,기능에만 중점을 둔다.
  • 캡슐화와 추상화는 상호 보완적이다.

상속성(Inheritence)

상속은 프로토타입을 기반으로해서 부모 클래스한테 하위 클래스들은 상속을 받을 수 있다.
상위 클래스의 모든것을 하위 클래스가 이어 받으며 부모클래스의 특징을 자식클래스에게 모두 물려준다.

  • 상위 클래스의 특성을 하위 클래스가 이어받아 재사용,추가,확장한다.
  • 코드의 재사용, 계층적인 관계 생성, 유지 보수에서 중요하다.

다형성(Polymorphism)

같은 이름을 가진 메소드여도 하위 클래스의 상황에 맞게 다르게 구현 할 수 있다.
하나의 변수명, 함수명등이 상황에 따라 다른 의미로 해설 될 수 있다.

  • 오버라이딩 : 상위 클래스의 메서드와 같은 이름, 매개변수를 재정의 한다, Runtime에 이루어지는 동적 다형성이다.
  • 오버로딩 : 같은 이름의 함수를 여러개 정의하고 파라미터의 타입과 개수를 다르게해서 파라미터에 따라 다르게 호출한다, Compile time에 이루어지는 정적 다형성이다.

FP란???

FP는 Functional Programming의 약자로서 함수형 프로그래밍이라고 부른다.
함수형 프로그래밍은 함수 사용을 강조하는 소프트웨어 개발 스타일이며 애플리케이션의 부수효과를 방지하고 상태 변이를 감소 시키기 위해 데이터의 제어 흐름과 연산을 추상하는 것이 핵심이다. 여러개의 작은 함수를 엮어 하나의 큰 함수를 구현하고 불변성을 지킨다.

FP의 장점

  • 높은 수준의 추상화를 제공한다.
  • 함수 단위의 코드 재사용성이 증가한다.
  • 디버깅이 쉽다.
  • 불변성을 지향하기 때문에 프로그램의 동작 예측이 쉽다.

FP의 특징

1급 객체(1급 시민)

컴퓨터 프로그래밍 언어에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가르킨다.

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

고차함수

함수의 파라미터로 함수를 전달할 수 있고 함수의 반환값으로 함수를 사용할 수 있다는 1급 객체의 특징을 가진 함수다.
고차함수의 예를들면 map, filter, reduce가 있다.

불변성

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

순수 함수

  • 순수 함수는 같은 입력에 대해 항상 같은 값을 출력한다.
  • 순수 함수는 부수 효과가 없다.
  • 함수 외부의 영향을 받지않는다.

참고한 사이트 :
https://serzhul.io/JavaScript/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/
https://j-su2.tistory.com/m/35
https://yesdoing.dev/functional%20programming/fp-javascript---1%EC%9E%A5-%EC%A0%95%EB%A6%AC/

profile
백엔드 개발자가 되자!
post-custom-banner

0개의 댓글