재밌는 Tech 상식

🧠 개발자들이 말하는 "추상화(abstraction)"란 무엇일까?

잡학&단어 2025. 6. 18. 11:56
반응형

코딩을 조금만 해보다 보면 자주 듣게 되는 단어 중 하나가 바로 **"추상화(abstraction)"**입니다. 마치 철학 용어 같기도 한 이 단어는 개발자들이 코드와 시스템을 설계할 때 매우 중요한 개념으로 자주 사용됩니다. 오늘은 이 추상화라는 개념을 개발 관점에서 쉽고 재미있게 풀어보겠습니다.


🔍 추상화란 무엇인가?

추상화는 복잡한 것을 간단하게 표현하는 기법입니다. 어떤 사물이나 개념의 핵심적인 특성만을 뽑아내고, 불필요한 세부사항은 숨기는 과정을 말합니다.

예를 들어, 우리가 자동차를 탈 때 엔진의 작동 원리나 기어 박스의 내부 구조까지 알 필요는 없습니다. 운전자는 "엑셀을 밟는다 → 차가 간다" 정도만 이해하면 됩니다. 이것이 바로 현실 세계에서의 추상화입니다.

개발에서도 이와 비슷하게, 복잡한 코드를 감추고 사용자(또는 다른 개발자)가 직관적으로 사용할 수 있게 만드는 것이 추상화입니다.


💻 프로그래밍에서의 추상화

프로그래밍에서 추상화는 다음과 같은 형태로 나타납니다:

1. 함수(Function)

  • 어떤 로직을 함수 하나로 감싸면, 내부의 복잡한 절차는 숨기고 이름만으로 의미를 전달할 수 있습니다.
  • 예시: calculateTax(income) → 내부에서 어떤 세율을 어떻게 계산하는지는 몰라도, "소득에서 세금을 계산해 주는 함수"라는 건 이해됩니다.

2. 클래스와 인터페이스 (OOP의 핵심)

  • 객체지향 프로그래밍에서의 추상화는 객체(클래스)로 현실 세계의 개념을 표현하는 것입니다.
  • 예: 동물이라는 클래스에서 소리내기()라는 메서드만 정의해두고, 실제 구현은 강아지, 고양이 등이 각각 다르게 수행.
class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("멍멍")

이런 방식으로 추상화를 하면 공통된 개념을 통일된 형태로 다룰 수 있어 코드가 유연해지고 유지보수가 쉬워집니다.


📦 추상화의 목적과 장점

1. 복잡성 관리

  • 코드를 계층화하고 세부사항을 감추면 전체 구조를 이해하기 쉬워집니다.

2. 재사용성 향상

  • 공통 기능을 추상화하여 여러 곳에서 재사용할 수 있습니다.

3. 유지보수 용이

  • 세부 구현이 바뀌어도 인터페이스(외형)가 같다면 다른 코드에 영향을 주지 않습니다.

4. 협업이 쉬워짐

  • 다른 개발자가 내부 구현을 몰라도, 추상화된 인터페이스만 알면 쉽게 사용 가능.

✨ 실생활 비유로 이해하는 추상화

실생활 예 추상화된 개념  내부  세부 내용
리모컨 전원 버튼 전자회로, 전기신호 등
커피 머신 커피 추출 버튼 압력, 물 온도, 그라인딩 등
자동차 운전 핸들, 페달 엔진 회전, 기어 변속 등

→ 복잡한 기능들을 감추고 사용자에게는 간단한 조작만 보이게 하는 것, 이것이 바로 추상화입니다.


📚 추상화 vs 캡슐화 vs 일반화 vs 모듈화

헷갈리기 쉬운 개념들을 정리해 보겠습니다:

개념 설명 예시
추상화 핵심만 보여주고 나머지는 감춤 커피 머신의 '추출' 버튼
캡슐화 데이터와 기능을 묶고 외부에서 직접 접근 제한 클래스의 private 변수
일반화 공통 특징을 묶어 상위 개념 정의 포유류 → 고양이/개
모듈화 기능 단위를 나누어 독립적인 블록으로 구성 사용자 로그인 모듈

🧩 추상화가 잘 된 코드의 예시

def send_email(to, subject, body):
    # 이메일을 전송하는 복잡한 과정은 숨김
    pass

# 사용자는 아래처럼 간단히 호출
send_email("user@example.com", "Hello", "메일 내용입니다.")

위처럼 추상화된 함수를 제공하면, 사용하는 사람은 내부 로직을 몰라도 쉽게 기능을 이용할 수 있습니다.


🧠 정리하며

추상화는 개발자가 더 나은 구조, 더 쉬운 유지보수, 더 높은 생산성을 추구할 수 있게 해 주는 핵심 개념입니다.

추상화는 결국 사람을 위한 것입니다. 컴퓨터는 복잡한 구조도 잘 이해하지만, 사람은 그렇지 않기 때문에 사람이 이해하기 쉽도록 만드는 설계 전략이 바로 추상화인 것입니다.

개발자라면, 추상화를 단지 개념으로만 알지 말고 직접 적용하고 평가해보는 경험이 중요합니다.


반응형