객체는 설계도(클래스)를 바탕으로 만들어진다. 자동차를 만들기 위해 설계도를 참고하듯, 메모리에서 사용하고 싶은 객체가 있다면 우선 해당 객체의 설계도를 만들어야 한다. 자바에서 이 설계도는 바로 클래스(Class)이다.
클래스에는 객체를 생성하기 위한 필드와 메서드가 정의되어 있다. 클래스로부터 만들어진 객체를 인스턴스(Instance)라고 부르며, 클래스로부터 객체를 만드는 과정을 인스턴스화(Instantiation)라고 한다. 하나의 클래스에서 여러 개의 인스턴스를 만들 수 있다.
자바에서 클래스를 선언할 때, 클래스 이름과 소스 파일 이름은 반드시 일치해야 한다.
public class PersonMainEx01 {
// 실행 클래스
public static void main(String[] args) {
// 변수 선언 및 초기화
int a = 10;
// 클래스 객체 생성
Person p1 = new Person(); // 이순신
Person p2 = new Person(); // 강감찬
Person p3 = new Person(); // 박문수
}
}
// 데이터 클래스
class Person {
// 필드와 메서드 정의 (필요에 따라)
}
파일 이름과 동일한 클래스에만
public
접근 제한자를 사용할 수 있다. 파일 이름과 일치하지 않는 클래스에public
을 붙이면 컴파일 에러가 발생하므로, 하나의 파일에는 하나의public
클래스를 선언하는 것이 좋다.
자바에서 객체는 new
연산자를 통해 생성된다. new
연산자는 메모리 힙(Heap) 영역에 객체를 생성한 후 객체의 주소를 반환한다. 이 주소값을 변수에 저장하면 해당 변수가 객체를 참조하게 된다.
Person p1 = new Person(); // 객체 생성 및 참조
📌 메모리 구조
- Stack: 객체의 참조값(주소)이 저장된다.
- Heap: 실제 객체 데이터가 저장된다. 객체가 생성될 때마다 새로운 메모리 공간이 할당된다.
stack
에 저장되고, 실제 데이터는 heap
에 저장된다. 그래서 객체의 참조값(주소)을 출력하면 객체의 실제 데이터가 아닌 메모리 주소를 확인할 수 있다.각각의 new
연산자는 서로 다른 메모리 공간에 객체를 생성하므로, 생성된 객체들은 완전히 독립된 서로 다른 객체이다. 즉, 하나의 클래스에서 여러 인스턴스를 만들더라도, 각각의 인스턴스는 서로 다른 메모리 공간을 사용한다.
- 클래스는 객체의 설계도로서, 객체의 필드와 메서드를 정의한다.
- 객체는
new
연산자를 통해 힙 영역에 생성되며, 생성된 객체는 독립적인 메모리 공간을 갖는다.- 참조 변수는 스택에 저장된 객체의 주소를 통해 힙에 있는 객체를 참조한다.