추상화(abstraction)는 특정 주제를 더 쉽게 다루기 위해 하위 수준의 정보를 상위 수준의 정보로 대체하는 과정입니다. 예를 들어, 심장마비로 인한 사망을 설명할 때, 단순히 ‘심장마비’라고 할 수도 있고, ‘뇌 산소 부족으로 인한 뇌 활동 중단’이라고 할 수도 있으며, ‘노환’이라고 할 수도 있습니다. 이 모든 설명은 관심 있는 세부 수준에 따라 유효합니다. 추상화 과정을 통해 생성된 결과물을 ‘추상(abstraction)’이라고 부르기도 합니다. 이는 특정 세부 수준에서 세상의 일부를 모델링한 것을 의미합니다.
두 가지 컴퓨터 프로그램, 즉 지역 부고를 추적하는 프로그램과 환자의 임상 세부 정보를 추적하는 프로그램을 상상해봅시다. 부고 프로그램에서는 ‘개인(individual)’이라는 추상을 사용하여 사망 원인을 ‘심장마비’와 같은 높은 추상화 수준에서 나열하는 것이 적절할 것입니다. 반면, 임상 프로그램에서는 ‘환자(patient)’라는 추상을 사용하여 사망 원인을 훨씬 낮은 추상화 수준에서 상세하게 기술하는 것이 더 적절할 수 있습니다. 두 추상 모두 동일한 엔티티(사람)를 참조하지만, 세부 수준과 추상화 수준이 다릅니다.
‘추상(abstract)’의 어원은 ‘생각이나 아이디어로 존재하지만 물리적 또는 구체적인 실체가 없는 것’ 또는 ‘특정 사례와 관련이 없는 것’입니다. 하지만 혼란스럽게도, ‘추상’이 반드시 추상적일 필요는 없습니다. 예를 들어, “마이클 잭슨은 심장마비로 사망했다”는 말은 매우 구체적이며 추상적이지 않습니다. 또한 추상이 반드시 일반화일 필요도 없습니다.
슬프게도, 프로그래밍 커뮤니티에서 추상화에 대한 일반적인 이해는 ‘추상적인 것’으로 여겨지며, 추상화가 일반화를 의미하게 되었습니다. 그러나 이는 잘못된 생각입니다. 추상화는 주로 일반화에 관한 것이 아니라, 개념을 적절한 수준의 세부 정보로 다루는 것에 관한 것입니다.