추상화와 객체 지향이란 부분에서 뭔가 힌트를 얻은 듯싶다.


정리하기는 힘들다만,


먼저 추상화,


예를 들어 자바 플랫폼에 대하여 생각해보면, 자바는 하나의 언어 모든 플랫폼이란 목표를 이루어냈지.


이것은 각 운영체제에 맞는 자바 머신을 개발하고, 그 자바 머신에 유저가 접근하는 형태로 이루어졌고,


분명히, 자바머신은 내부 구현 및 돌아가는 형태가 운영체제마다 다를 것임.


하지만 자바머신이 유저에게 전해주는 인터페이스와 자바라는 언어 그 자체는 이러한 구현을 하나도 신경쓰지 않아도 되도록 만들어졌음.


특히, 윈도우든, 리눅스든 동일한 작동을 기대할 수 있고, 또 작동하는 것이지. 이러한 점들이 바로 추상화로 이루어낸 것이고,


다른 예를 보면, c에서 메모리를 할당하거나 해제하는 것에서 유저는 각 함수를 호출하여 메모리 할당 및 해제라는 작동을 바라는 것이지.


실제로 하드웨어 수준의 메모리가 있고, 이 메모리를 제어하는 하드웨어 부품이 있을 것이고, 이 제어하는 부품과 연결된 운영체제의 일부분이 있겠지.


하드웨어 레벨의 메모리가 추상화가 반복되어 마침내 코드로 그것들을 다룰 수 있게 되는 것이고.


객체 지향,


젤리를 생각해보자. 젤리는 젤리만의 성질이 있겠지. 딱딱하지도 흐르지도 않는 성질 기타 등등. 이 젤리를 내가 벽에다 던진다고 했을 때,


내가 던지는 행위는 프로그램에서 물체를던진다(); 정도로 짤 수 있겠지. 이 함수는 날라가는 상태의 젤리에 어떠한 관여도 하지 않을 것임. 만약 물체를던진다()함수에서 


날라가는 젤리의 모양을 바꾸게 하는 등의 일을 호출한다면 그게 바로 잘못 짜여진 것이겠고. 날라가는 젤리는 그 자체의 작동에 의하여 이리저리 위치도 바뀌고, 모양도


조금씩 바뀔테고, 그리고 마침내 젤리가 벽에 부딪히면, 젤리의 모양은 엄청나게 변하겠지, 이때도 벽과부딪치다()라는 함수가 있겠지만, 이 함수에서 젤리의 모양을 이리저리


바꾼다면 그것도 잘못된 함수 구성일것이고. 벽과부딪치다()라는 함수 내부에서 젤리의 모양을 바꾸는 게 아니라 젤리의 모양을 바꾸는 함수를 호출하는 식으로 짜야하는 것.


쓰고나니 비문이 많고 중구난방이긴한데 -_-.... 샤워하면서 생각해봤다


피드백을 부탁드리오