추상화 라는 단어는 미술 시간에 한번쯤은 들어본적이 있을 것이다.

미술에서의 추상화는 사진 처럼 사물을 눈에 보이는 것처럼 자연적, 사실적으로 재현하는 것이 아니라, 점, 선, 면, 색채 등의 단순한 표현을 이용해 그림을 그리는 것을 말한다.

이처럼 컴퓨터 과학에서도 추상화를 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

즉, 정리하자면 보통 알고는 있지만 정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점을 잡아 설명하는 것을 '추상적으로 표현한다' 즉 '추상화한다' 라고 말한다고 볼 수 있다.

객체지향 프로그래밍에서도 이 추상화는 중요한 개념 중에 하나이다.

프로그래밍에서의 추상화는 클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것을 말한다.

즉 클래스들의 중요하고 공통된 성질들을 추출하여 부모(슈퍼) 클래스를 선정하는 개념과, 이벤트 발생의 정확한 절차나 방법을 정의하지 않고 대표할 수 있는 표현으로 대체하는 것을 말한다.

객체 지향 프로그래밍의 추상화는 크게 두가지로 나뉘는데, 객체의 관련 속성 만 '표시' - 데이터 추상화 하고 불필요한 세부 정보는 '숨긴다' - 제어 추상화 가 있다.