[아시나요?]객체
객체 지향 프로그래밍에서 말하는 객체란 과연 무엇일까? 객체 지행 프로그래밍이란 말그대로 프로그래밍의 모든 것이 객체를 이용하는 방향으로 진행된다는 뜻이다. 즉 객체 지향에서 모든것은 객체(Object)롤 이루어져 있다. 그런데 바로 전에 객체 지향 프로그래밍은 클래스를 중심으로 프로그래밍을 진행한다고 말한 적이 있다. 조금 헷갈릴 수도 있겠지만 모두 맞는 말이다. 객체 지향 프로그래밍은 객체를 중심으로 움직인다고 할 수도 잇고 클래스를 중심으로 움직인다고도 말할 수 있다. 이 둘 사이의 관계만 잘 정립해도 자바를 배우는데 많은 도움이 된다.
우리가 살고 있는 세상을 한번 들여다보자. 필자는 지금 지구라는 행성에서 아시아라고 하는 대륙에 대한민국이라는 나라에 살고 있다. 필자가 지금 글을 쓰고 있는 곳은 대한민국의 수도 서울이다. 필자의 방에는 컴퓨터와 시계, 어지럽게 널려져 있는 자바에 관한 책과 옷가지들로 가득차 있다. 이처럼 우리가 사는 세상은 모든 것이 표현가능한 어떤 물체로 이루어져 잇다. 지금 주위를 한번 둘러보기 바란다. 그리고 눈에 보인는 모든 것을 한번 말해보자. 책, 컴퓨터, 조명, 거실 등 여러분이 말할 수 있는 모든 것이 바로 물체, 즉 객체(Object)인 것이다.
세상은 모든 것이 객체로 이루어져 있다. 앞에서 말한 객체 지향에서 모든 것은 객체로 이루어져 있다는 말과 비슷하게 들리지 않는가? 이 두 말은 분명 같은 뜻을 내포하고 있다. 객체 지향 프로그래밍이 라는것은 결국 실제의 세계와 가장 비슷한 형태로 프로그래밍을 할 수 있는 방법을 제공해 주는 프로그래밍 방법론이다.
여기서 객체에 대해서 한번 더 생각해 보자. 우리가 일상에서 사용하는 컴퓨터, 휴대폰, 책상, 등 지칭할 수 있는 모든걸을 객체라고 말할 수 있다. 이러한 것들은 볼 수 있거나 또는 만질 수 있기 때문에 이것을 객체라고 할 수 있는것이다. 즉 그것이 존재하기 때문에 그것을 객체라고 말할 수 있는것이다. 이러한 객체에 대한 일상의 개념들을 객체 지향 프로그래밍은 그대로 언어에 반영하였다. 그러나 실제의 세계와 프로그래밍과는 엄연한 차이가 존 재하기 때문에 약간의 개념이 프로그래밍에는 더 추가가 되어 있다. 그 중 하나가 바로 클래스라는 것이다.
실제 세계에서 휴대폰이라고 말하면 그것이 무엇인지 쉽게 알 수 있지만 프로그래밍 내에서 휴대폰이라고 한다면 무엇을 말하는 것인지 알 수가 없다. 프로그래밍 내에서 휴대폰이 무엇인지를 알려주어야만 하는데, 이때 바로 클래스를 사용한다. 휴대폰이 어떻게 생겼는지, 무슨 색인지, 어떻게 동작하는지 등에 대한 자세한 설명을 담아 놓은 것이 바로 클래스이다. 즉 실제 객체 설명서, 설계서, 명세서와 같은 역할을 하는 것이 바로 클래스이다. 그리고 객체를 클래스로 전환하는 과정을 모델링이라고 하는것이다.
객체라는 것은 볼 수 있거나 만질 수 있기 때문에 그렇게 부르는 것이다. 그럼 프로그래밍 내에서는 이런 객체의 기준이 무엇일까? 조금은 어려울 수고 있는데 정답은 바로 메모리에 있다. 메모리에 해당 클래스의 실체가 존재하면 그것을 객체라고 부르는 것이다. 이것은 컴퓨터에 대한 약간의 지식을 필요로 한다.
램(메모리)이라고 부르는 것은 실제 CPU가 작업할 때 작업할 것에 대한 내용을 담아두는 곳이다. 보통 작업 테이블에 비유하곤 한다. 이곳에 작업할 내용이 올라와 있다면 CPU는 작업할 수 있을 것이고, 없다면 당연히 작업을 진행할 수 없을 것이다. 실제 세계의 객체가 볼 수 있고 만질 수 있는 것과 마찬가지로 프로그래밍에서의 객체란 바로 메모리에 그 내용이 올라와 CPU가 그것을 볼 수 있고 만질 수 있어서 작업을 할 수 있는 상태를 말하는 것이다.
다시 객체와 클래스로 돌아와서 우리가 만든 Phone 클래스는 아직 메모리에 그 실체가 존재하지 않는다. 즉 Phone 클래스의 객체가 메모리에 존재하지 않기 때문에 아직 이것을 이용할 수 없다.
그럼 지금 만든 클래스를 사용하기위해서 필요한 것은 무엇이겠는가? 물론 클래스에 대한 객체를 만들면 이것을 사용할 수 있다. 자바에서 이 작업은 간단히 new라는 키워드를 사용함으로써 수행할 수 있다. 지금 만든 클래스의 이름이 Phone 이라면 객체는 다음과 같은 방법을 통해서 만들어진다.
Phone phone = new Phone(); //phone 객체 생성
이제 휴대폰에 대한 객체가 메모리에 만들어졌으며 phone 이란 변수를 통해서 이 객체를 이용할 수 있게 되었다. 참고로 객체레 대한 변수는 레퍼런스 변수라고 한다.