추상화(abstraction)란?
복잡한 것들을 목적에 맞게 단순화 하는 것
추상화를 알아보기 전에, 추상이라는 단어의 뜻을 알아봅시다.
추상抽象(뽑을 추, 코끼리 상)
추상이란 여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용입니다.
복잡한 구체적인 정보들은 숨기고 꼭 필요한 핵심만 뽑아내서 표현하는 방식을 추상화라고 합니다.
생각해보면, 우리의 일상생활에 많은 것들이 추상화의 결과물입니다. 많은 글들을 함축적인 의미로 나타낸 책의 제목이나, 몇 시간 동안 펼쳐지는 내용을 짧게 요약한 영화의 줄거리도 결국에는 목적에 맞게 꼭 필요한 핵심만 표현하는 추상화라고 할 수 있습니다.
이런 의미에서 보면, 복잡한 것들을 목적에 맞게 단순화 하는 것도 추상화라고 할 수 있습니다.
어딘가 장소를 찾을 때 사용하는 지도도, 추상화의 대표적인 예시로 볼 수 있습니다.
다양한 목적에 맞게 추상화된 지도들은 그냥 보는 것만으로도 쉽게 이해하고 원하는 정보를 얻을 수 있습니다.
이처럼 추상화는 단순하고 간결하게 표현하면서도, 그 핵심만큼은 명확하게 드러내는 것이기 때문에 표현을 하는 입장에서도, 이 표현을 접하는 입장에서도 훨씬 효과적인 소통이 되도록 도와주는 장점이 있습니다.
프로그래밍에서도 이 추상화의 개념을 얘기하는 것은 상당히 중요합니다.
프로그래밍을 통해 어떤 프로그램을 만든다는 것은 어쩌면 코드를 작성하는 자신과의 소통이 될 수 있고, 작성한 코드를 실행하는 컴퓨터와의 소통이 될 수도 있고, 아니면 함께 코드를 작성하는 동료와의 소통이 될 수도 있고, 그리고 내가 만든 프로그램을 사용하는 사용자와의 소통이 될 수도 있습니다. 프로그래밍을 할 때 이 추상화를 통한 코드를 작성하면 더 좋은 소통, 더 좋은 표현이 될 수 있습니다.
실제로도 이 프로그래밍은 이 추상화의 연속이라고 해도 과언이 아닙니다.
우리가 살면서 쓰고 행동하는 교통카드, 문자, 검색, 자동차 시동 걸기와 같은 모든 행동들은 단순해 보이지만 그 속에는 무수한 원인과 결과가 내포되어 있습니다. 이러한 행동들은 전부 추상화의 결과입니다. 자바스크립트 외 많은 프로그래밍 언어들도 추상화의 결과라고 할 수 있습니다. 컴퓨터가 어떻게 작동하는 지 신경쓰지 않고 마음껏 코드를 짜기 때문입니다.
즉, 추상화는 생산성(productivity)의 향상을 이끌어냅니다.
자바스크립트를 공부하면서 함수를 통해 많은 결과 값을 얻어낼 수 있습니다. 추상화의 관점에서 함수 또한 생산성의 향상을 이끌어낼 수 있다고 할 수 있습니다. 여기서 한 단계 높인 것이 고차 함수입니다.
함수 = 값(배열)을 전달 받아, 이 값을 가지고 복잡한 작업을 수행 = 값 수준에서의 추상화
고차 함수 = 함수(사고의 묶음)을 전달 받아 작업을 수행 = 사고의 추상화
즉, 추상화의 수준이 높아진 만큼 생산성도 비약적으로 상승하기에, 우리는 고차함수를 사용하는 것입니다.
참고: https://youtu.be/NcvX9SzUlcs
https://yeonjewon.tistory.com/15
나중에 읽을 글...
https://thevaluable.dev/abstraction-type-software-example/
'자바스크립트 > 기초' 카테고리의 다른 글
변수(Variable) (2) | 2021.06.15 |
---|---|
Object.fromEntries() (0) | 2021.06.11 |
배열 내장 고차 함수 (2) | 2021.06.10 |
일급 객체(First-class citizen)와 고차함수(Higher-order function) (0) | 2021.06.09 |
함수 선언식과 함수 표현식의 차이 (1) | 2021.06.06 |