클래스와 객체에 관련된 정보에 대하여 알아봅니다.
객체의 모델링
객 체지향 프로그래밍에서는 여러 개의 객체를 모아 하나의 전체 프로그램을 구성하게 됩니다. 프로그램에서 객체를 모델링, 즉 객체를 표현하기 위해서는 물리적 특성(객체의 속성)과 동적 특성(객체의 동작)을 규명하여야 합니다. 예를 들어 자동차라는 객체가 가지고 있는 각 특성을 살펴보면 아래와 같이 될 수 있습니다.
자동차의 물리적 특성 :
- 자동차 중량
- 자동차 색상
- 배기량
자동차의 동적 특성 :
- 출발
- 방향전환
- 정지
- 자동차 중량
- 자동차 색상
- 배기량
자동차의 동적 특성 :
- 출발
- 방향전환
- 정지
이러한 자동차의 특성에 따라 "둘리", "밍키", "후키"이라는 사람이 소유하고 있는 자동차를 모델링하면 다음과 같습니다.
항목 | 둘리 | 밍키 | 후키 | |
---|---|---|---|---|
물리적 특성 |
중량 | 1800kg | 2600kg | 4500kg |
색상 | 은색 | 흑색 | 흰색 | |
배기량 | 2000CC | 3000CC | 5000CC | |
동적 특성 |
출발 | 엔진에 연료를 공급한다 동력을 바퀴에 전달한다 바퀴를 움직인다 |
엔진에 연료를 공급한다 동력을 바퀴에 전달한다 바퀴를 움직인다 |
엔진에 연료를 공급한다 동력을 바퀴에 전달한다 바퀴를 움직인다 |
방향 전환 |
조향핸들을 조작한다 | 조향핸들을 조작한다 | 조향핸들을 조작한다 | |
정지 | 엔진에 연료 공급을 중단한다 바퀴에 전달하는 동력을 차단한다 바퀴를 정지시킨다 |
엔진에 연료 공급을 중단한다 바퀴에 전달하는 동력을 차단한다 바퀴를 정지시킨다 |
엔진에 연료 공급을 중단한다 바퀴에 전달하는 동력을 차단한다 바퀴를 정지시킨다 |
클래스의 필요성
위 의 예에서 3개의 자동차가 각각 서로 다른 객체이기 때문에 각각의 자동차가 가지는 물리적 특성을 서로 다를 수 있습니다. 그러나 이러한 3개의 객체는 모두 자동차라는 공통점을 가지고 있기 때문에 각각의 자동차가 다른 물리적 특성을 가지고 있더라도 그 구조는 모두 동일합니다. 즉, 각각의 자동차는 서로 다른 색상을 가질 수 있지만, 모든 자동차는 색상이라는 특성을 가지고 있다는 공통점을 가지고 있습니다. 결국 모든 자동차들은 동일한 구조로 표현된다고 할 수 있습니다.
각각의 자동차가 서로 다른 물리적 특성을 가질 수 있는 것과 달리, 모든 자동차는 동일한 방법으로 동작하게 됩니다. 즉, 모든 자동차는 동일한 동적 특성을 가지게 됩니다.
이 와 같이 자동차라는 공통점을 가지고 있는 각각의 객체는 서로 다른 물리적 특성을 가질 수 있지만, 각각의 객체에 데이터(물리적 특성)를 저장하는 구조(자료구조)와 각각의 객체에서 수행하는 동적 특징은 공유하게 됩니다. 이와 같이 각각의 객체에서 공유하게 되는 정보를 표현하기 위하여 객체지향 프로그래밍에서는 클래스(Class)라는 개념을 사용하게 됩니다. 이와 같이 클래스는 "둘리", "밍키", "후키"가 소유한 차, 즉 객체가 가지는 물리적 특성의 구조(자료구조)와 동적 특성을 표현하게 됩니다.
인스턴스(instance)
인 스턴스란 클래스에 속하는 하나의 객체로써, 클래스에 정의된 특성을 가지게 되는 객체를 말합니다. 이에 따라 인스턴스는 자신이 소속된 클래스에서 정의한 구조(자료구조)에 따라 정보를 가질 뿐만 아니라, 자신이 가지고 있는 정보를 조작하기 위하여 클래스에 정의되어 있는 동적 특성을 사용합니다.
클래스와 인스턴스 개념을 이용한 객체의 모델링
위의 그림에서 보면 동적 특성(함수)이 클래스에 속하여 있으며, 인스턴스에서는 단지 필요에 따라 클래스에 정의되어 있는 이러한 동적 특성을 이용하게 됩니다.
여기에 기술된 내용은 10년 전에 제가 보던 C++ 책의 내용을 기반으로 작성된 것이라 이미 책에서 보신 기억이 나시는 분도 있으리라 생각되네요.
'phpclass > 클래스활용' 카테고리의 다른 글
{객체에 관련된 정보}3.메소드 다루기(PHP4) (0) | 2000.10.19 |
---|---|
{객체에 관련된 정보}2.Serialize/Unserialize (0) | 2000.10.19 |
{클래스&객체함수}14.method_exists (0) | 2000.10.10 |
{클래스&객체함수}13.is_subclass_of (0) | 2000.10.10 |
{클래스&객체함수}12.is_a (0) | 2000.10.10 |