내가 학식 때 학점이 모잘라서 '객체지향 프로그래밍' 수업을 계절로 들은 적이 있음

-틀-인 나는 이게 학점이랑 상관 없어서 편-안 하게 들으면서

'아이고 상대평가인데 학점 들어가는 니들이 A가져가라'이러면서 대충 놀면서 듣는데...

.... 이새끼들 학점이 안 급한가? 다들 자더라고???

하도 애들이 자니까 갓 박사 딴 강사 선생님이 좀 빡이 치셨는지 딴소리를 하시더라고


자기가 박사 따고 졸업파티 할 때 교수님이 자기 손을 꼬옥 붙잡으시면서 이런 말씀을 하셨대.

'XX양 난 아직도 객체가 뭔지 잘 모르겠어요'

이러면서 아이들에게 '객체가 뭔가요?' 라고 물어봄

대답 잘 하면 학점 올려준다면서


학점 이야기에 자던 애들이 눈을 번쩍 뜨더니

클래스니 뭐니 자기 아는 걸 영혼까지 털어서 이야기를 하더라고

난 잠자코 듣다가 이렇게 한마디 함.


----------------------------

객체지향 프로그램밍의 목적은 실제 세상에 존재하는 사물을 컴퓨터 안에서 모사하기 위한 것이다.

모든 프로그램은 코드와 데이터로 나뉘므로,

실제로 존재하는 사물을 컴퓨터 안에서 모사하려면 사물을 코드와 데이터로 나누어야 한다.


데이터란 무엇인가? 모사 대상이 되는 사물이 갖는 state에 대응되는 하나의 정수이다.

코드란 무엇인가? 모사 대상이 되는 사물에 조작을 가하면 사물은 한 state에서 다른 state로 변화한다.

코드란 그 사물의 state 변화에 대응되는 조작에 대응되는 알고리즘이다.


가령 강의실의 프로젝터를 보자. 프로젝터가 띄우는 하나의 화면은 단 하나의 정수에 대응된다.

마찬가지로 우리는 그 프로젝터가 갖는 각종 세팅값 - 초첨거리, 화면밝기 등등 - 을 포함하여

그 프로젝터의 상태를 단 하나의 정수에 대응시킬 수 있다.

우리가 프로젝터에 조작을 가하면-가령 밝기를 줄이면-프로젝터의 상태는 변화하고 이 변화된 상태 역시 단 하나의 정수에 대응된다

우리가 밝기 조작 버튼을 누르는 동작을 컴퓨터에서 묘사하는 것은,

그 첫 번째 정수에서 두 번째 정수로 프로젝터의 상태를 변화시키는 것을 뜻한다.


이런 맥락에서 클래스란 그 상태변화의 규칙을 모아놓은 집합이다.

왜냐하면, 우리의 실제 세계에서 같은 회사의 같은 모델인 모든 프로젝터는,

그 동일한 입력값이 주어졌을 때 동일한 상태를 갖기 때문이다.


동일한 클래스의 서로 다른 인스턴스란, 각자가 가진 state의 값이 다르지만

동일한 입력값이 주어졌을 때 동일한 상태를 갖는 메모리의 서로 다른 영역이다.

동일한 회사의 동일한 모델 프로젝터들은 서로 다른 화면을 띄울 수 있고,

이는 이들에게 다른 입력값이 주어졌기 때문이다.


이러한 방식으로 객체지향 프로그래밍은 실제 사물을 모사한다.

---------------------------


난 지금 생각해봐도 내 대답이 아주 괜찮은 대답 중 하나라고 확신함.

실제로 포닥 선생님 역시도 '자기가 지금까지 들어본 것 중에 가장 좋은 것이다'라고 대답을 해줌


근데 강의실 옆에 있던 어떤 애는 '뭐 저딴 개병신소리 하는 새끼가 다 있냐?' 이런 눈으로 쳐다보더라

니 한숨쉬는 거 내 귀에 다 들렸다 이새퀴야

이게 사람들 상식레벨에서 너무 벗어난 소리를 하면 병신이 되는 건가 싶음...