프로그래밍에서의 추상화란?

sinjuk1·2025년 5월 3일
9
post-thumbnail

개요

프로그래밍을 하다 보면 '추상화'라는 말을 자주 들었다. 하지만 상황에 따라 그 의미가 조금씩 달라 헷갈릴 때가 있었다.
이 문서에서는 추상화라는 개념을 두 가지로 나누어 설명하고, 각각의 예시를 통해 어떻게 이해할 수 있는지 소개한다.
글을 끝까지 읽으면, '복잡성 은닉'과 '일반화'라는 두 시선으로 추상화를 구분하고, 대화나 코드 리뷰에서 그 맥락을 파악하는 데 도움이 되는 기준을 얻을 수 있다.


1. 추상화, 자주 듣지만 가끔 헷갈리는 말

우테코에서 크루들과 함께 얘기하거나 코드 리뷰에서, 정말 자주 듣고 보게 되는 말이 있다.
"추상화 수준이 적절하네요", "여기 추상화 계층이 조금 어색한 것 같아요", "이건 추상화를 잘해서 사용하기 좋네요."

그러다 어느 순간,'추상화'가 같은 단어이지만 맥락마다 의미가 조금씩 다르게 느껴지는 순간들이 있었다.
그런 고민을 하던 중, 시지프와의 대화에서 인터페이스 개념을 접하면서 왜 다르게 느꼈는지 알게 되었다.

우리는 '추상화'라는 단어를 다양한 의미로 사용하고 있었기 때문이다.

그래서 이 글에서는, 내가 이해한 바를 바탕으로
프로그래밍에서의 '추상화'를 두 가지로 정리하고, 각각이 어떤 상황에서 사용되는지 살펴보려고 한다.


2. 추상화 개념 정리: 두 가지 관점

코드 리뷰와 다양한 개발 경험을 돌아보며, 나는 프로그래밍에서의 추상화를 다음 두 가지로 정리했다.

  1. 복잡한 내부 구현을 숨기고 간단한 인터페이스를 제공하는 것
    예를 들어 스마트폰은 내부적으로 복잡한 회로와 동작 원리를 갖고 있지만, 사용자는 버튼만 누르면 된다.
    마치 우리가 HTTP 요청을 보낼 때 내부 TCP 연결이나 핸드셰이킹 과정을 신경 쓰지 않아도 되는 것처럼.
    이런 식의 추상화는 복잡성 은닉(Complexity Hiding)이라고 부를 수 있다.

  2. 공통적인 핵심적인 요소를 뽑아 일반화하는 것
    바퀴가 달리고 사람이 타는 물체를 ‘탈 것’이라 부르는 것처럼,
    비슷한 동작을 수행하는 여러 함수나 객체에서 중복을 제거하고 공통 부분을 묶는 것도 추상화다.
    이것은 일반화(Generalization)라고 할 수 있다.


3. 추상화 예시

예시 1. 스마트폰 인터페이스

  • 추상화 전: 전류, 트랜지스터, 운영체제 스케줄링 등 모든 걸 알아야 사용 가능
  • 추상화 후: "앱을 터치한다"는 단순 동작으로 복잡한 로직이 실행됨

예시 2. JavaScript의 fetch 함수

  • 내부적으로는 XMLHttpRequest나 HTTP 프로토콜을 다루지만, 개발자는 fetch(url)만 호출하면 된다
  • 복잡한 내부 구현을 감추고 간단한 사용법만 제공하는 대표적 추상화

예시 3. 탈 것의 개념

  • 자동차, 자전거, 기차는 모두 '탈 것'이라는 상위 개념으로 묶인다
  • OOP에서 Vehicle이라는 추상 클래스를 만들고, drive()라는 공통 메서드를 정의할 수 있다

4. 이제 추상화의 맥락이 보인다

이 글에서는 추상화를 '복잡성 은닉'과 '일반화'라는 두 시선으로 나누어 살펴보았다. 혼란스러웠던 추상화라는 개념도, 상황에 따라 달리 쓰이는 단어였다는 점을 이해하면서 더 명확해졌다.
이 글이 코드 리뷰나 개발 대화 속에서 '추상화'라는 말이 어떤 맥락에서 쓰였는지 더 쉽게 파악될 수 있도록, 도움이 되었으면 좋겠다.

profile
함께 성장하는 것을 지향합니다.

0개의 댓글