Class와 Object 이해하기
Class랑 Object에 대해 쉽게 설명해 보기
객체란 상태가 있고 행동을 하는 실체입니다. 예를 들어 자동차를 보면 모델명, 현재 속도, 크기 등 여러가지 상태 정보가 있고 동시에 직진, 후진, 좌회전 등 여러가지 행동을 할 수 있습니다. 또 우리 사람도 객체라고 볼 수 있습니다. 이름, 나이, 성별 등 상태가 있고 먹거나 놀거나 일하는 등의 행동을 합니다. 또, 구름도 객체라고 볼 수 있습니다. 크기, 고도, 모양 등의 상태가 있고 움직이거나 비를 내리는 등의 행동을 합니다.
여기서 클래스란 어떠한 속성이 있고 어떻게 행동하는지를 기술한 설계도입니다. 차를 만들기 위해서는 반드시 설계도가 필요합니다. 그 설계도를 보면 이 차에는 어떠한 속성들이 있고 어떻게 동작하는 지를 자세히 설명하고 있습니다. 차 설계도는 차가 아니지만 차 설계도를 보고 차를 만들 수 있습니다. 마찬가지로 클래스도 객체는 아닙니다. 하지만 객체는 클래스로부터 만들어진 겁니다.
1
2
3
4
5
6
7
8
class Car{
private String name,
private double speed,
private Size size;
...
public void start() {...}
public void stop() {...}
...
Car라는 이름의 클래스를 정의했습니다. 클래스는 속성을 가지고 어떠한 행동을 하는지를 기술한 설계도, 설명서 같은 것입니다.
위의 코드를 보면 먼저 속성을 정의했습니다. 속성에는 모델명이 있고 속도가 있고 차의 크기가 존재합니다. 그리고 차는 출발하기도 하고 멈추기도 하는 여러가지 행동을 합니다. 이렇게 자동차의 속성과 행동들을 정의했습니다.
1
2
3
Car myCar = new Car("니로");
Car yourCar = new Car("소나타");
Car ourCar = new Car("스포티지");
해당 부분은 클래스를 바탕으로 객체를 만드는 것입니다. 그 클래스의 실제 객체. 즉, 실체를 만드는 것입니다. 이 3가지의 객체는 모두 다연히 Car라는 클래스의 타입을 가지게 됩니다.
여기서 객체는 상태 정보를 가진다고 했고 클래스는 속성에 대한 것을 기술한다고 했습니다. 다시 보면 Car에서 속성이라는 것을 기술했고 실제로 속성에 대응하는 모델명에 주목해 보면 이 모델명이 실제로 대응하는 값은 객체마다 다릅니다.
- 첫 번째 myCar라는 개체 모델명은 니로이고, 두 번째는 소나타, 세번 째는 스포티지라는 모델명을 갖고있습니다. 즉, 각 객체의 이름이 다 다르다는 것을 알 수 있습니다.
- 속성은 name으로 하나지만 name에 대응하는 상태 정보는 객체마다 다를 수 있습니다.
클래스 : 내가 원하는 속성과 행동을 구체적으로 기술한 것 객체 : 그렇게 기술한 대로 실체화 된 것