2009년 1월 4일 일요일

Abstraction(추상화)

[그림 1] 몬드리안의 나무


공대생이 보는 수많은 참고서에 보면 예외없이 등장하는 단어는 바로 '추상화' 이다. 추 상화라는 단어의 뜻은 주어진 문제나 시스템을 중요하고 관계 있는 부분만 분리해 내어 간결하고 이해하기 쉽게 만드는 작업이다.

이러한 과정은 원래의 문제에서 구체적인 사항은 되도록 생략하고 핵심이 되는 원리만을 따지기 때문에 원래의 문제와는 전혀 관계가 없어 보이는 수학적인 모델이 나오기도 한다.

이 기법은 복잡한 문제나 시스템을 이해하거나 설계하는 데 없어서는 안될 중요한 요소이다. 때문에 추상화가 많이 되어진 모델은 내부적인 개념을 이해하기가 점점 어려워진다. 그렇다면 왜 컴퓨터관련서적에 이리도 많은 추상화라는 단어가 나올까?

[그림1]은 몬드리안 -[Mondrian, Piet, 1872.3.7~1944.2.1 네덜란드의 화가 ]- 의 작품이다. 추상화의 과정을 함축적으로 보여준다. 인간이 이해할수 있는 가장 근본적인 내용만 담고 있다. 하지만 마지막 그림만 떼어놓고 본다면, 그림의 원래의 모습을 전혀 유추할수 없을 것이다. 이런것이 추상화 이다.

컴퓨터에서의 추상화는 크게 두가지로 구분된다. 데이터추상화와 콘트롤추상화이다.
데이터를 추상화한다는것은 어찌보면, 과거부터 오래된 관습들과 수학적 개념들이 배후에 깔려있다.

예를들자, 어떠한 물건이 세개가 있다. 사람들은 공통적으로 약속을 하게된다. 어떠한 물건이 세개가 있을때 우리는 그걸 직접 그리지 말고, 기호를 이용하여 '3' 이라고 표시하기로...

그리고 그 숫자들과 숫자들이 할수 있는 모든 행위들을 나열해 주는 것이다. 세개의 과일과, 두개의 나무가 있다. 총 몇개인가? 총 5개

어떻게 머리속으로 생각이 됬을까? 3+2 가 생각됬다면 정상적으로 초등학교 산수를 마친것이다. 그렇다. 3은 세개라는 개념의 추상화된 수학적 모델이고, 각 수학적 모델은 더하라라는 연산을 + 라는 기호를 이용하여 추상화 했다.

인간이 가진 직관이나 논리를 일련의 식으로 나타내어 추상화를 수행할 수 있다.

컴퓨터에서의 추상화도 이와 같다. 컴퓨터라는 기계는 1하고 0만 이해할수 있는 정말 무식한 놈이다. 그런데 우리가 많이 쓰는 C언어에서는 컴퓨터가 변수에 값을 할당도 하고, 조건분기도 하며, 반복도 시켜준다. 정말 대단하지 않은가? 이것들이 바로 추상화의 과정을 거친것이기 때문이다.

값을 대입한다(assignment)
int a=2;

이렇게 추상화 되어 있는 식으로 부터 우리는 a 라는 변수에 정수 2를 넣는구나 할 것이다. 그러나 컴퓨터 입장에서 본다면 저 한줄은 정확히 4바이트의 기억공간에 00000~00010 을 넣는 행위가 될수 있다. 추상화된 것을 더 구체화해 살펴보면 컴퓨터의 일정 메모리영역에, 전기를 넣었다가 뺏다가 하면서 어떠한 상태를 유지하는것이다. 그러나 우리는 전기가 어떻게 작동되고 있는지 고려할 필요는 전혀 없다. 그냥 값을 대입하고 싶으면 a=3, b=2 와 같은 식으로 작성하기만 하면 나머지는 컴퓨터가 알아서, 해줄것이다.

컴퓨터가하는 연산들도 마찬가지이다. c=a+b 와 같은 것이 말이 되는가?
a+b를 더하면 a가 b만큼 더해져야 되지 않턴가? 우리가 배운 수학만 가지고 계산한다면 저 문장은 절대 풀수 없다. 추상화는 주어진 환경에 따라 아무 민감하다. 일반수학에서는 c는 a+b와 같다?? 가 되지만 프로그래밍언어인 C에서 이 문장은 a+b를 먼저 계산하고, c 변수에서 그 결과를 저장하자. 라는 개념을 추상화하는 것이다.

추상화는 우리가 대단히 이해하기 힘들고 복잡한 내부 과정과 개념들은 모두다 덮어두고, 이해하기 쉬운 구조만 표현해 내는 정말 대단한 기법이다. 조금만 깊게 생각해보면 우리가 사는 세상의 거의 대부분도 이 추상화라는 기법을 이용하고 있다.

댓글 없음:

댓글 쓰기