2.1 Abstraction

추상화는 프로그래밍에서 문제를 해결하는 근간이 된다. 예를 들어보자.

사과 하나에 10원이고 2개가 있다면 얼마가 될까? 

우리는 본능적으로 10*2를 계산하여 20원인 것을 안다.

그런데, 사과와 10 2개과 2의 관계는 어떻게 이어지는 것일까? 사과를 포도라고 한다고 문제를 풀 수 없는 것이 안다. 개수가 2개에서 10개로 바뀐다고 문제를 풀 수 없는 것이 아니다.

우리는 사과의 가격과 개수를 추상화하여 숫자로 만든 것이다.

사과 하나 당 가격이 10원 * 2개 → 10 * 2

사과에서 포도로 바뀐다면 어떻게 될까?

포도 하나당 가격이 20원 * 2개 → 20 * 2

우리는 이 형태를 아래처럼 추상화 한다면 여러 물품들(과일을 넘어서)의 문제를 쉽게 풀 수 있게 된다.

가격 * 개수

여기서 가격특정 물품 한 단위의 가격 이라고 하자.

이제 다시 위의 문제가 나타났다. 우리는 속으로 위의 공식을 가지고 사과의 가격과 개수를 치환할 것이다.

치환하라 가격을 10으로
 치환하라 개수를 2으로 
   (가격 * 개수)에서 

(치환하라 가격을 10으로
	(치환하라 개수를 2으로
		(가격 * 개수)에서))

좀 더 정제된 포맷으로 표현하기 위해 아래처럼 바꾸자

REPLACE cost 10 IN
  REPLACE items WITH 2 IN cost * items

이제 우리는 cost * items 의 대수적 형태를 위의 식을 따라 치환하자

REPLACE cost 10 IN
  REPLACE items WITH 2 IN cost * items

which is:

REPLACE items WITH 2 IN 10 * items

which is:

10 * 2

그런데 우리가 얻게 될 값이 다른 의미를 가진다면 어떻게 될까? 이번에 cost가 사과 하나당 가격이 아니라, items를 구매할 때 필요한 총액이라고 하자. 여기서 하나당 가격을 구하려면 아래의 식이 필요하다. 아직 구체적인 숫자를 정해지지 않았다.