사람의 속성이나 행동을 예로들었을때 '사람'이라고 판단할 수 있는 속성이나 사람이 할 수 있는 행동이 너무 많고 그 하나하나를 모두 기술할 수 없다. 또한 사람이라고 판단되는 속성이나 행동은 필요에 따라 선별해서 사용할 수 있다.
가령 어떤 영역의 업무를 처리함에 있어 필요 하지 않는 정보를 제외하고 필요로 하는 속성이나 행동을 추출하는 작업이 추상화의 개념이 된다.
예를 들어,
위의 예로 든 법과 같이 추상화는 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념 혹은 집합으로 다루는 수단을 일컫는다.
자동차 종류마다 엔진 오일을 교환하는 방식이 다르다고 가정했을 때,
swith(자동차 종류)
case 아우디: break; // 아우디 엔진 오일을 교환하는 과정을 기술
case 벤츠: break; // 벤츠 엔진 오일을 교환하는 과정을 기술
end switch
새로운 종류의 자동차 엔진 오일을 교환하는 기능을 추가하라는 요구사항이 있을 경우 BMW의 엔진 오일을 교환하는 case문을 더 추가해야 한다.
swith(자동차 종류)
case 아우디: // 아우디 엔진 오일을 교환하는 과정을 기술
case 벤츠: // 벤츠 엔진 오일을 교환하는 과정을 기술
case BMW: // BMW 엔진 오일을 교환하는 과정을 기술
end switch
특정 모델의 자동차 대신 이들의 추상화 개념인 자동차를 이용할 경우의 코드는 다음과 같다.
void changeEngineOil(Car c){
c.changeEngineOil();
}
아우디, 벤츠의 추상화 개념인 Car를 사용한다. 그런데 인자 어느 곳에도 구체적인 자동차 종류와 연관된 부분을 찾을 수가 없다. 따라서 이 코드는 어떤 새로운 자동차가 추가되더라도 변경할 필요가 없다.
Reference
출처 남길게요. 좋은 글 감사합니다~