객체(Object)에 대해서 흔히 일상생활 속에서 파악할 수 있는 모든 사물이라고 비유한다. 사실 객체지향을 처음 배우면서 이런 말을 선뜻 이해하기는 쉽지 않다. 그러나 그것만큼 명확한 설명이 또 없다. (뭐라는 건지...)
그러면 예를 들어보자. 내가 정의할 객체는 개발자다. 모든 개발자는 이름이 있고 나이가 있다. 그리고 먹고, 자고, 코딩한다. 그 외에도 다양한 요소들이 있겠지만 내가 정의할 개발자라는 객체에 필요한 요소는 이게 전부라고 가정한다.
이때 이름, 나이와 같이 객체의 특성을 표현할 수 있는 것은 '속성'이라고 하고 먹고, 자고, 코딩하는 것과 같이 움직임을 표현하는 것은 '동작'이라고 한다. 그리고 특정 객체를 구성하는 속성과 동작을 적절하게 선정하여 정의하는 것을 '객체 모델링(Object Modeling)'이라고 한다.
앞서 속성으로 이름과 나이, 동작으로 먹고, 자고, 코딩하기를 선정한 것이 바로 객체 모델링인 것이다.
이러한 속성과 동작을 자바에서는 인스턴스 변수와 함수로 나타내는 것이다. 그러면 실제 자바에서 개발자라는 객체를 어떤 과정을 통해서 생성하고 사용하는지 살펴보자.
2. 객체지향 개발 과정
객체지향 개발은 다음의 3단계를 거친다.
(1) 객체 모델링
이미 객체 모델링은 해봤다. 개발자라는 객체에 필요한 속성과 동작을 선정했다. 이러한 선정 방법에는 두 가지가 있다. 바로 일반화와 구체화 객체 모델링이다.
'일반화 객체 모델링'은 자바 개발자, C 개발자, 파이썬 개발자로 세분화된 객체에서 일반화된 개발자라는 객체를 선정하는 것이고 반대로 '구체화 객체 모델링'은 개발자 객체에서 자바 개발자, C 개발자, 파이썬 개발자로 세분화된 객체를 선정하는 것이다.
(2) 클래스 정의하기
개발자 객체의 속성과 동작을 선정했고 해당 요소들에 대해서 자바에서는 인스턴스 변수와 함수로 표현한다고 했다. 이러한 속성과 동작은 클래스에 포함된다. 즉 자바에서는 객체를 다음과 같이 클래스로 나타낸다.
public class Developer {
private String name;
private int age;
public Developer() {
System.out.println("Developer Object is created!");
}
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
public void coding() {
System.out.println("coding");
}
}
(3) 객체 생성 및 사용
클래스를 정의한 후에 사용하려면 객체를 생성해야 한다. 객체를 생성하는 것을 '객체 인스턴스화'라고도 한다. 이러한 인스턴스화는 클래스를 실제로 메모리에 올리는 것을 의미한다.
즉 객체가 생성되면 클래스의 구성 요소인 인스턴스 변수와 함수가 메모리에 할당되는 것이다. 이렇게 메모리에 할당된 객체를 인스턴스(instance)라고 한다. 그래서 클래스의 멤버 변수 일부를 인스턴스 변수라고 부르는 것이다.