추상화와 고차함수

태로샐러드·2021년 8월 2일
0

javascript 기초

목록 보기
22/22
post-thumbnail

🍫 추상화란?

복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것

위 개념을 프로그래밍에 적용하면 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법이다.

function getAvg(data) {
  let sum = 0;
  for (i = 0; i < data.length; i++) {
    sum = sum + data[i]
  }
  return sum / data.length;
}

getAvg([1,2,3]); // 2

위 함수는 data라는 배열을 입력받아 내부에서 반복문을 통해 각 배열의 요소를 합하고, 마지막에 배열의 길이만큼 나누는 간단한 함수다.
함수를 작성하고 나서 어떤 배열 요소들의 평균값을 구하고 싶다면
getAvg([1,2,3]) 의 형태로 사용하면 된다.
이렇게 함수를 사용할 때 함수 안에 있는 계산 방법 등은 가려져 있다. 값만 입력받을 뿐이다.

이 상황에서 이 함수는 '값 수준에서의 추상화'가 이루어졌다고 볼 수 있다.

filter, map, reduce 등 처럼 함수를 인자로 전달 받거나, 함수를 리턴하는 고차함수는 단순 값 수준에서가 아닌, 함수(사고의 묶음)의 수준에서 추상화가 이루어진 것이다.

추상화의 수준이 높아질수록 생산성이 비약적으로 상승한다.

이 얘기는 절차형 프로그래밍과 선언형프로그래밍으로 이어질 수 있다.

🍫 절차형 프로그래밍

  • 절차형 프로그래밍은 순차적인 로직에 따라서 코드가 실행되는 방식을 의미한다. '어떻게' 를 중점에 두고 컴퓨터의 처리구조와 유사하게 코드를 짜는 방식이다.
function double (arr) { 
  let results = [];
  for (let i = 0; i < arr.length; i++){ 
    results.push(arr[i] * 2) 
  } 
  return results 
}

위 코드처럼 절차형 프로그래밍 방식은 배열 요소의 곱하기 2 한 값을 구하기 위해 반복문으로 배열 요소 하나하나에 접근, 계산하는 방법을 구현하고 있다.

🍫 선언형 프로그래밍

  • 선언형 프로그래밍은 절차형 프로그래밍을 추상화한 방식이라고 생각하면 된다.
  • 어떻게보다, '무엇'에 중점을 두고 코드를 짠다. 이 경우 컴퓨터의 관점이 아닌 실제 세계에서처럼
    단위를 나눠서 거기에 의미를 부여하고 '추상화'한다. 추상화 한 것들을 표현하는 것이 선언형 프로그래밍이다.
function double (arr) { 
  return arr.map((item) => item * 2) 
}

위 절차형 프로그래밍에서의 예시를 map 메소드로 표현한 것이다.
절차형의 for문, push와 같이 결과를 도출하기 위한 과정을 하나하나 적는게 아닌, 필요한 것이 어떤것인지 표현했다.
map()이 어떻게 작동되는지 알기보다는 '무엇을' 원하는지에 중점을 두는 방식이다.

정말 깔끔하게 잘 정리해주신 - Judo 님의 블로그를 참고했습니다.🙏

profile
기획, 개발공부, 그 외 잡다한 여정 기록 (SEMI로)

0개의 댓글