JAVA (7) - 클래스와 객체
1. 개요
자바(Java)는 대표적인 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 언어이다. 객체 지향 프로그래밍의 핵심은 현실 세계의 사물이나 개념을 프로그램 내의 ‘객체’로 모델링하여 코드를 작성하는 데 있다. 이러한 객체를 만들어내기 위한 틀이나 설계도가 바로 클래스(Class)이다.
2. 클래스와 객체의 개념
클래스(Class)는 객체를 생성하기 위한 설계도이자 틀에 해당한다. 반면, 객체(Object)는 그 설계도를 바탕으로 메모리에 실제로 구현된 실체이다.
- 클래스(Class): 객체가 가져야 할 속성(데이터)과 기능(동작)을 정의해 둔 코드 영역이다.
- 객체(Object): 클래스로부터 생성되어 메모리에 할당된 실체로, ‘인스턴스(Instance)’라고도 부른다.
쉬운 예로 ‘붕어빵 틀’은 클래스에 비유할 수 있고, 그 틀에서 구워져 나온 ‘붕어빵’은 객체에 비유할 수 있다. 붕어빵 틀 자체를 먹을 수는 없듯이, 클래스 그 자체로는 동작하지 않으며 이를 통해 생성된 객체가 실제로 메모리상에서 동작한다.
3. 클래스의 구성 요소
클래스는 크게 필드(Field), 메서드(Method), 생성자(Constructor) 세 가지 핵심 요소로 구성된다.
- 필드(Field): 객체의 상태나 속성을 저장하는 변수이다.
- 생성자(Constructor): 객체가 생성될 때 호출되며, 객체의 초기화를 담당하는 특별한 메서드이다.
- 메서드(Method): 객체의 행동이나 기능을 정의하는 함수이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}
}
4. 객체 생성과 메모리 구조
자바에서는 new 연산자를 사용하여 클래스로부터 객체를 생성한다.
1
2
Car myCar = new Car("Red");
이 한 줄의 코드가 실행될 때 내부 메모리(JVM)에서는 다음과 같은 과정이 일어난다.
- Heap 영역:
new Car("Red")에 의해 실제Car객체가 Heap 메모리 공간에 할당된다. 객체의 필드값인color와speed역시 이 공간에 저장된다. - Stack 영역: 참조 변수인
myCar가 Stack 메모리 공간에 생성되며, Heap 영역에 생성된 실제 객체의 주소(참조)값을 가지게 된다.
결과적으로 myCar.accelerate()와 같이 참조 변수를 통해 Heap 영역에 있는 객체의 메서드를 호출하거나 필드에 접근할 수 있게 된다.
5. 정리
클래스는 만들고자 하는 대상의 속성과 기능을 정의하는 설계도이며, new 연산자를 통해 Heap 메모리에 실체화된 결과물이 객체이다.
클래스 내에 필드, 생성자, 메서드를 용도에 맞게 적절히 설계하는 것이 효율적인 자바 프로그램을 작성하는 바탕이 된다.