S2_U1_CH3. 고차 함수의 중요성

Judevv·2023년 5월 11일
0

Chapter 3. 고차 함수의 중요성

학습 목표

  • 추상화에 대해 설명할 수 있다.
  • 추상화의 관점에서 고차 함수가 갖는 이점에 대해 설명할 수 있다.
  • 고차 함수를 통해 사고 수준에서의 추상화를 달성할 수 있다.

3-1. 고차 함수를 쓰는 이유

  • 가장 큰 이유는 코드 재사용성과 가독성을 높이기 위해서!

  • 코드의 재사용성

    • 개발 시간 단축! 개발 비용 절감!
    • 한 번 작성한 코드를 재사용할 수 있기 때문에 새로운 기능을 추가하거나 유사한 기능을 구현할 때 기존의 코드를 적극적으로 활용할 수 있음
  • 코드의 높은 가독성

    • 유지 보수가 용이! 협업 유리!
    • 코드가 복잡하고 이해하기 어려우면 버그를 수정하거나 새로운 기능을 추가하는 것이 어려워지는데, 코드가 명확하고 이해하기 쉬우면 버그를 찾아 수정하는 것이 빠르고 쉬워지며, 새로운 기능을 추가하기도 용이해짐
    • 다른 개발자들이 코드를 쉽게 이해하고 수정할 수 있음

3-2. 고차 함수의 추상화

  • 복잡한 어떤 것을 합축해서 핵심만 추출한 상태 : 추상화

  • 고차 함수의 추상화는 함수를 일반화하고 추상화된 개념으로 변환하여, 함수의 재사용성과 유연성을 높이는 과정!

  • 함수를 추상화하면, 함수가 받는 입력값과 반환값의 형태가 좀더 일반화가 되는데, 이렇게 추상화된 함수는 더 다양한 상황에서 사용될 수 있음

    • 코드의 재사용성과 가독성을 높일 수 있음 : 생산성의 향상?

  • JavaScript를 비롯한 많은 프로그래밍 언어 역시, 추상화의 결과

    • 컴퓨터를 구성하는 장치(중앙처리장치, CPU; Central Processing Unit)는 0과 1만 이해하는데, 크롬 개발자 도구의 콘솔(console) 탭에서 코드를 입력했을 때, 어떤 과정을 거쳐 출력되는지 몰라도 결과를 출력할 수 있음
    • 그런 복잡한 것들은 크롬의 JavaScript 해석기(엔진)가 대신해 주기 때문

  • 함수는 사고(thought) 또는 논리(logic)의 묶음 : 추상화의 관점

    • 함수를 통해 얻은 추상화를 한 단계 더 높인 것이 고차함수!
      • 함수 = 값을 전달받아 값을 리턴한다. = 값에 대한 복잡한 로직은 감추어져 있다. = 값 수준에서의 추상화
    • 고차 함수는 이 추상화의 수준을 사고의 추상화 수준으로 끌어올림
      • 값 수준의 추상화: 단순히 값(value)을 전달받아 처리하는 수준
      • 사고의 추상화: 함수(사고의 묶음)를 전달받아 처리하는 수준
    • 고차 함수를 통해, 보다 높은 수준(higher order)에서 생각할 수 있음
      • 고차 함수 = 함수를 전달받거나 함수를 리턴한다. = 사고(함수)에 대한 복잡한 로직은 감추어져 있다. = 사고 수준에서의 추상화
  • 예시
    • 사고 수준의 추상화를 적용하여 "학생" 이라는 개념을 추상화
      • 학생은 이름, 학번, 학과, 수강과목 등의 정보를 가지고 있음
      • 이러한 학생의 정보를 나타내기 위해서는 객체를 사용할 수 있음
      • 하지만, 보다 추상적인 수준에서 학생을 생각해보면, 학생은 학교에서 공부하는 사람이라는 개념으로 일반화될 수 있음
      • 추상화된 개념을 사용하여 문제를 해결하면, 학생의 정보뿐만 아니라 교수, 직원, 방문객 등 다른 사람들도 포함된 것들을 나타낼 수 있음
class Person {
  constructor(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
  } // 학생, 교수, 직원 등 학교에서 일하는 사람들을 일반화한 개념
  
  study() {
    console.log(`${this.name} is studying.`);
  }
}

const student = new Person("Alice", 20, "Student");
const professor = new Person("Bob", 40, "Professor");

// student와 professor는 각각 학생과 교수를 나타냄

student.study(); // "Alice is studying."
professor.study(); // "Bob is studying."

// study 메서드는 학생이나 교수가 공통적으로 가지고 있는 특징으로, 두 인스턴스에서 모두 사용할 수 있음
profile
감성있는 개발자를 꿈꿔요

0개의 댓글