추상화의 개념과 오해

Abstraction != abstractness

작성자
발행일
2025년 08월 14일

핵심 요약

  • 1 추상화는 특정 주제를 쉽게 다루기 위해 하위 수준 정보를 상위 수준 정보로 대체하는 과정입니다.
  • 2 추상화는 또한 특정 세부 수준에서 세상의 일부를 모델링한 결과물인 '추상' 그 자체를 의미하기도 합니다.
  • 3 프로그래밍 커뮤니티에서 추상화가 종종 일반화로 오해되지만, 추상화의 본질은 개념을 적절한 수준의 세부 정보로 다루는 것입니다.

도입

추상화는 복잡한 정보를 이해하기 쉽게 단순화하는 필수적인 개념입니다. 이 글은 추상화의 진정한 의미와 프로그래밍 분야에서 흔히 발생하는 오해를 명확히 하고자 합니다. 추상화는 단순히 추상적이거나 일반화하는 것이 아니라, 주어진 맥락에 따라 적절한 수준의 세부 정보를 다루는 과정임을 강조합니다.

추상화(abstraction)는 특정 주제를 더 쉽게 다루기 위해 하위 수준의 정보를 상위 수준의 정보로 대체하는 과정입니다. 예를 들어, 심장마비로 인한 사망을 설명할 때, 단순히 ‘심장마비’라고 할 수도 있고, ‘뇌 산소 부족으로 인한 뇌 활동 중단’이라고 할 수도 있으며, ‘노환’이라고 할 수도 있습니다. 이 모든 설명은 관심 있는 세부 수준에 따라 유효합니다. 추상화 과정을 통해 생성된 결과물을 ‘추상(abstraction)’이라고 부르기도 합니다. 이는 특정 세부 수준에서 세상의 일부를 모델링한 것을 의미합니다.

두 가지 컴퓨터 프로그램, 즉 지역 부고를 추적하는 프로그램과 환자의 임상 세부 정보를 추적하는 프로그램을 상상해봅시다. 부고 프로그램에서는 ‘개인(individual)’이라는 추상을 사용하여 사망 원인을 ‘심장마비’와 같은 높은 추상화 수준에서 나열하는 것이 적절할 것입니다. 반면, 임상 프로그램에서는 ‘환자(patient)’라는 추상을 사용하여 사망 원인을 훨씬 낮은 추상화 수준에서 상세하게 기술하는 것이 더 적절할 수 있습니다. 두 추상 모두 동일한 엔티티(사람)를 참조하지만, 세부 수준과 추상화 수준이 다릅니다.

‘추상(abstract)’의 어원은 ‘생각이나 아이디어로 존재하지만 물리적 또는 구체적인 실체가 없는 것’ 또는 ‘특정 사례와 관련이 없는 것’입니다. 하지만 혼란스럽게도, ‘추상’이 반드시 추상적일 필요는 없습니다. 예를 들어, “마이클 잭슨은 심장마비로 사망했다”는 말은 매우 구체적이며 추상적이지 않습니다. 또한 추상이 반드시 일반화일 필요도 없습니다.

슬프게도, 프로그래밍 커뮤니티에서 추상화에 대한 일반적인 이해는 ‘추상적인 것’으로 여겨지며, 추상화가 일반화를 의미하게 되었습니다. 그러나 이는 잘못된 생각입니다. 추상화는 주로 일반화에 관한 것이 아니라, 개념을 적절한 수준의 세부 정보로 다루는 것에 관한 것입니다.

결론

이 글은 추상화가 단순히 정보를 숨기거나 일반화하는 것을 넘어, 특정 목적에 맞게 정보의 세부 수준을 조절하는 강력한 도구임을 명확히 합니다. 프로그래밍에서 효과적인 추상화를 이해하고 적용하는 것은 코드의 가독성, 유지보수성, 그리고 재사용성을 높이는 데 필수적입니다. 따라서 개발자들은 추상화의 본질적인 의미를 정확히 파악하고, 상황에 맞는 적절한 추상화 수준을 선택하는 능력을 길러야 할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!