실제 세계의 객체와 객체지향 세계의 객체의 차이
앞선 글에서 객체를 실제 세계에 비유하니 객체가 무엇인지 한 번에 이해를 했을 것이다. 이러한 이유 때문에 흔히들 객체를 실제 세계에 비유해 설명한다. 하지만, 실제 세계의 객체는 프로그래밍 상의 객체와 다른 점이 있다. 실제 세계에서는 대부분의 객체들은 수동적이며, 사람이나 고양이 혹은 강아지 같은 자율적인 객체들에 의해 수동적으로 행동한다. 하지만 객체지향 세계의 객체는 수동적으로 행동하지 않는다.
예를 들어보자. 사람들이 사용하는 조명, 펜, 가위 등은 사람에 의해 수동적으로 행동한다. 조명은 사람에 의해 켜지고, 펜과 가위는 사람에 의해 사용된다. 그렇다면 이러한 수동적인 객체들은 프로그래밍 상의 객체가 될 수 없는걸까? 당연히 될 수 있다. 수동적인 객체들을 자율적으로 만들면 된다. 수동적인 객체를 자율적으로 만드는 것이 어떻게 가능할지 아래 사람과 조명 예시를 통해 살펴보자.
실제 세계에서 조명은 사람에 의해 수동적으로 켜져서 빛을 비춘다. 아래 그림을 보자. 사람은 조명의 꺼져있는 조명에 조명 켜기라는 행동을 할 수 있다.
이렇게 되면 조명의 상태는 꺼짐에서 켜짐으로 바뀐다.
조명이 수동적으로 켜지는 방식은 실제세계에서 사람과 조명이 동작하는 방식이다.
자율적인 객체
하지만 프로그래밍 상의 객체는 자율적이다. 조명이 객체지향 세계의 객체가 되면 사람에 의해 상태를 조절 받는 것이 아닌 직접 자신의 상태를 조절한다. 조명을 자율적으로 만드는 것은 간단하다. 단순히 조명 내부에 자신의 상태를 켜짐으로 바꾸는 행동을 추가하면 된다.
자 이제 조명이 객체체향 세계의 객체가 되었으니 위의 과정을 다시 반복해보자. 사람은 조명에 켜짐으로 바꾸라는 메세지를 전달한다. 이에 조명 객체는 메세지를 읽고 자신의 상태를 켜짐으로 바꾼다.
그러면 조명은 자기 스스로에 의해 켜짐 상태로 바뀌게 된다.
즉, 조명이 켜지고 꺼지고는 조명 스스로에 의해 결정된다. 수동적인 조명 객체는 자신의 상태를 바꿀 행동이 자신에게 없었고, 다른 객체가 직접 자신의 상태를 바뀌게 허용하였다면, 자율적인 객체는 다른 객체로부터 메세지를 받고 자신이 직접 행동을 한다. 즉, 조명이 자율성을 가지는 것이다. 즉, 조명은 켜짐과 꺼짐이라는 상태를 가지고 '켜는 행동' 혹은 '끄는 행동' 이라는 행동을 스스로 할 수 있는 자율적인 객체가 된다.
자 이제 실제 세계와 객체 지향의 세계가 어떻게 다른지에 대한 이해가 되었을 것이다. 앞으로 우리는 프로그래밍을 하면서 객체지향 세계를 계속해서 창조해낼 것이다. 이 내용은 모든 객체지향의 기초가 되니 꼭 잘 알아두도록 하자.