[CS] 디자인 패턴과 프로그래밍 패러다임3


프로그래밍 패러다임

프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론

객체지향 프로그래밍은 프로그래머들이 프로그램을 상호 작용하는 객체들의 집합으로 볼 수 있게 하는 반면, 함수형 프로그래밍은 상태 값을 지니지 않는
함수 값들의 연속으로 생각할 수 있게 해준다.

image

ㅁ 선언형 > 함수형 프로그래밍

‘무엇을’ 풀어내는가에 집중한 패러다임으로 프로그램은 함수로 이루어진 것이다. 라는 명제가 담겨있다.

배열만 받아서 누적한 결괏을 반환하는 순후 함수 reduce()를 이용한 예시로, 작은 *‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 *‘고차 함수’를 통해 재사용성을 높인 패러다임.
JS는 함수가 일급 객체이기에 함수형 프로그래밍 방식이 선호된다.

const list = [1,2,3,4,5,11,12]
const ret = list.reduce((max, num)=>num > max ? num : max,0)

console.log(ret) //12


ㅁ 명령형 > 객체지향 프로그래밍

객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급해 객체 내부에 선언된 메서드를 활용하는 방식.
설계에 많은 시간이 소요되며, 처리속도가 느림.

const ret=[1,2,3,4,5,11,12]
class List {
  constructor(list) {
    this.list = list
    this.max = list.reduce((max, num)=>num > max ? num : max, 0)
  }
  getMax() {
    return this.max
  }
}

const a = new List(ret)
console.log(a.getMax())  //12

ㅁ 객체지향 프로그래밍 특징

> 추상화

복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것

> 캡슐화

객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것

> 상속성

상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장 하는 것으로, 코드의 재사용 측면, 계층적인 관계 생성, 유지 보수성 측면에서 중요

> 다형성

하나의 메서드나 클래스가 다양한 방법으로 동작하는 것으로 오버로딩, 오버라이딩이 대표적이다.

ㅁ 객체지향과 설계원칙(SOLID)

S - 단일 책임
O - 개방 - 폐쇄
L - 리스코프 치환
I - 인터페이스 분리
D - 의존 역전

용어 정리

ㅁ 순수 함수
출력이 입력에만 의존하는 것

const pure = (a,b) => {
  return a + b
}

ㅁ 고차 함수
함수가 함수를 매개변수로 받아 로직을 생성하는 것

ㅁ 일급 객체
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 뜻하며 아래 특징을 가진다.

  • 변수나 메서드에 함수를 할당할 수 있다.
  • 함수 안에 함수를 매개변수로 담을 수 있다.
  • 함수가 함수를 반환할 수 있다.

ㅁ 커링
여러개의 인자를 받는 함수를 단일 인자를 받는 함수들의 체인으로 변환하는 것

function add(a){
  return function (b){
    return a+ b
  }
}
const add5 = add(5)
console.log(add5(5)) //10
  • 특정 인자를 미리 적용한 함수 생성 가능(코드 가시성 증가)
  • 코드 재사용성 향상

ㅁ 오버로딩 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 개수 등으로 여러 개를 둘 수 있고 컴파일 중 발생하는 ‘정적’다형성 이다.

ㅁ 오버라이딩
주로 메서드 오버라이딩을 말하며, 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의 하는 것을 의미한다. 런타임 중에 발생하는 ‘동적’ 다형성 이다.

댓글남기기