본문 바로가기

자바스크립트/기초

추상화(abstraction)

 

추상화(abstraction)란?

복잡한 것들을 목적에 맞게 단순화 하는 것

 

추상화를 알아보기 전에, 추상이라는 단어의 뜻을 알아봅시다.

추상抽象(뽑을 추, 코끼리 상)

추상이란 여러가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용입니다.

복잡한 구체적인 정보들은 숨기고 꼭 필요한 핵심만 뽑아내서 표현하는 방식을 추상화라고 합니다.

 

생각해보면, 우리의 일상생활에 많은 것들이 추상화의 결과물입니다. 많은 글들을 함축적인 의미로 나타낸 책의 제목이나, 몇 시간 동안 펼쳐지는 내용을 짧게 요약한 영화의 줄거리도 결국에는 목적에 맞게 꼭 필요한 핵심만 표현하는 추상화라고 할 수 있습니다.

이런 의미에서 보면, 복잡한 것들을 목적에 맞게 단순화 하는 것도 추상화라고 할 수 있습니다.

어딘가 장소를 찾을 때 사용하는 지도도, 추상화의 대표적인 예시로 볼 수 있습니다.

다양한 목적에 맞게 추상화된 지도들은 그냥 보는 것만으로도 쉽게 이해하고 원하는 정보를 얻을 수 있습니다.

이처럼 추상화는 단순하고 간결하게 표현하면서도, 그 핵심만큼은 명확하게 드러내는 것이기 때문에 표현을 하는 입장에서도, 이 표현을 접하는 입장에서도 훨씬 효과적인 소통이 되도록 도와주는 장점이 있습니다.

 

프로그래밍에서도 이 추상화의 개념을 얘기하는 것은 상당히 중요합니다.

프로그래밍을 통해 어떤 프로그램을 만든다는 것은 어쩌면 코드를 작성하는 자신과의 소통이 될 수 있고, 작성한 코드를 실행하는 컴퓨터와의 소통이 될 수도 있고, 아니면 함께 코드를 작성하는 동료와의 소통이 될 수도 있고, 그리고 내가 만든 프로그램을 사용하는 사용자와의 소통이 될 수도 있습니다. 프로그래밍을 할 때 이 추상화를 통한 코드를 작성하면 더 좋은 소통, 더 좋은 표현이 될 수 있습니다.

 

실제로도 이 프로그래밍은 이 추상화의 연속이라고 해도 과언이 아닙니다.

 

우리가 살면서 쓰고 행동하는 교통카드, 문자, 검색, 자동차 시동 걸기와 같은 모든 행동들은 단순해 보이지만 그 속에는 무수한 원인과 결과가 내포되어 있습니다. 이러한 행동들은 전부 추상화의 결과입니다. 자바스크립트 외 많은 프로그래밍 언어들도 추상화의 결과라고 할 수 있습니다. 컴퓨터가 어떻게 작동하는 지 신경쓰지 않고 마음껏 코드를 짜기 때문입니다.

 

즉, 추상화는 생산성(productivity)의 향상을 이끌어냅니다.

 

 자바스크립트를 공부하면서 함수를 통해 많은 결과 값을 얻어낼 수 있습니다. 추상화의 관점에서 함수 또한 생산성의 향상을 이끌어낼 수 있다고 할 수 있습니다. 여기서 한 단계 높인 것이 고차 함수입니다.

 

함수 = 값(배열)을 전달 받아, 이 값을 가지고 복잡한 작업을 수행 = 값 수준에서의 추상화

고차 함수 = 함수(사고의 묶음)을 전달 받아 작업을 수행 = 사고의 추상화

 

즉, 추상화의 수준이 높아진 만큼 생산성도 비약적으로 상승하기에, 우리는 고차함수를 사용하는 것입니다.

 

참고: https://youtu.be/NcvX9SzUlcs

https://yeonjewon.tistory.com/15

 

고차 함수_3 (feat. 추상화)

✅고차 함수란? 고차 함수(higher order function)는 함수를 인자(argument)로 받거나 함수를 리턴하는 함수를 말한다. 이 때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback functio..

yeonjewon.tistory.com

 

나중에 읽을 글...

https://thevaluable.dev/abstraction-type-software-example/

 

What Are Abstractions in Software Engineering with Examples

Abstraction is fundamental in software development. What is it? What's its benefits? Should we abstract everything?

thevaluable.dev

 

반응형