자바(Java)는 대표적인 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어이다. 객체 지향 프로그래밍의 핵심은 현실 세계의 사물이나 개념을 프로그램 내의 '객체'로 모델링하여 코드를 작성하는 데 있다. 이러한 객체를 만들어내기 위한 틀이나 설계도가 바로 클래스(Class)이다.
클래스(Class)는 객체를 생성하기 위한 설계도이자 틀에 해당한다. 반면, 객체(Object)는 그 설계도를 바탕으로 메모리에 실제로 구현된 실체이다.
쉬운 예로 '붕어빵 틀'은 클래스에 비유할 수 있고, 그 틀에서 구워져 나온 '붕어빵'은 객체에 비유할 수 있다. 붕어빵 틀 자체를 먹을 수는 없듯이, 클래스 그 자체로는 동작하지 않으며 이를 통해 생성된 객체가 실제로 메모리상에서 동작한다.
클래스는 크게 필드(Field), 메서드(Method), 생성자(Constructor) 세 가지 핵심 요소로 구성된다.
public class Car {
// 1. 필드 (속성)
String color;
int speed;
// 2. 생성자 (초기화)
public Car(String color) {
this.color = color;
this.speed = 0;
}
// 3. 메서드 (기능)
void accelerate() {
this.speed += 10;
}
}
자바에서는 new 연산자를 사용하여 클래스로부터 객체를 생성한다.
Car myCar = new Car("Red");
이 한 줄의 코드가 실행될 때 내부 메모리(JVM)에서는 다음과 같은 과정이 일어난다.
new Car("Red")에 의해 실제 Car 객체가 Heap 메모리 공간에 할당된다. 객체의 필드값인 color와 speed 역시 이 공간에 저장된다.myCar가 Stack 메모리 공간에 생성되며, Heap 영역에 생성된 실제 객체의 주소(참조)값을 가지게 된다.결과적으로 myCar.accelerate()와 같이 참조 변수를 통해 Heap 영역에 있는 객체의 메서드를 호출하거나 필드에 접근할 수 있게 된다.
클래스는 만들고자 하는 대상의 속성과 기능을 정의하는 설계도이며, new 연산자를 통해 Heap 메모리에 실체화된 결과물이 객체이다.
클래스 내에 필드, 생성자, 메서드를 용도에 맞게 적절히 설계하는 것이 효율적인 자바 프로그램을 작성하는 바탕이 된다.