추상화(Abstraction)

uglyduck.dev·2020년 9월 20일
1

개념 모아 🗂

목록 보기
20/40

정의

사람의 속성이나 행동을 예로들었을때 '사람'이라고 판단할 수 있는 속성이나 사람이 할 수 있는 행동이 너무 많고 그 하나하나를 모두 기술할 수 없다. 또한 사람이라고 판단되는 속성이나 행동은 필요에 따라 선별해서 사용할 수 있다.

가령 어떤 영역의 업무를 처리함에 있어 필요 하지 않는 정보를 제외하고 필요로 하는 속성이나 행동을 추출하는 작업이 추상화의 개념이 된다.

예를 들어,

  1. 내부의 특수한 설비로 인해 승차 인원이 10인 이하인 자동차
  2. 국토해양부령으로 정하는 경형 자동차로서 승차 인원이 10인 이하인 전방 조종 자동차
  3. 캠핑용 자동차 또는 트레일러. 그리고 자동차를 세단과 쿠페로 구분하는 경우 문이 4개 있는 일반 자동차는 세단으로 구분하고, 문이 2개 있고 천장이 낮은 자동차는 쿠페로 구분한다.

위의 예로 든 법과 같이 추상화는 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념 혹은 집합으로 다루는 수단을 일컫는다.

자동차 종류마다 엔진 오일을 교환하는 방식이 다르다고 가정했을 때,

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

  • 정인상,채흥석, 『JAVA 객체 지향 디자인 패턴』, 한빛미디어(2019.3.8), 60~62p
profile
시행착오, 문제해결 그 어디 즈음에.

1개의 댓글

comment-user-thumbnail
2021년 4월 1일

출처 남길게요. 좋은 글 감사합니다~

답글 달기