1. 객체와 클래스
클래스(Class)
- 객체를 생성하기 위한 설계도
- 필드(상태)와 메서드(행동)을 정의
- JVM 관점에서는 클래스 로딩 시 Method Area에 적재하는 것
class Person {
String name;
int age;
void speak() {
System.out.println("아아 목소리 테스트!");
}
}
객체(Object)
- 클래스를 기반으로 실제 메모리에 생성된 실체
- 서로 다른 객체는 각자 독립적인 상태를 가짐
Person p1 = new Person(); # Person 객체 1
Person p2 = new Person(); # Person 객체 2
2. 객체 생성 과정(메모리 관점)
Person p = new Person();
JVM 내부 동작 순서
- 클래스 로딩
- Person.class가 처음 사용되면, Method Area에 클래스 정보 적재되고, static 변수 / static 블록 초기화
- 객체 생성 (Heap)
- new Person() 실행 Heap 영역에 객체 생성 인스턴스 필드 기본값으로 초기화
- 생성자 호출
- 생성자 코드 실행
- 필드 값 초기화
- 참조 변수 저장 (Stack)
- 참조 변수 p는 Stack에 생성
- Heap 객체의 주소값을 저장
3. 메시지 전달과 협력
객체지향에서 객체는 서로 직접 데이터를 조작하지 않는다.
-> 메서드 호출로 협력한다.
p.speak();
- 호출하는 쪽: 메시지를 보냄
- 호출받는 객체: 메시지를 처리
📌 중요한 점
- 객체 내부 구현은 외부에서 알 필요 없음
- 외부는 "무엇을 할 수 있는가"만 안다.
➡️ 캡슐화의 핵심!!
4. 객체 간 협력과 책임
객체지향의 본질은 클래스가 아니라 객체 간 협력이다.
- 객체마다 하나의 책임
- 객체들은 메시지로 협력
📌객체지향 설계 핵심 원칙
- 객체는 역할을 갖는다.
- 객체는 책임을 갖는다.
- 객체는 협력을 한다.
5. 객체지향에서 중요한 사고 전환
- 이 클래스에 뭐를 더 넣을까 -> ❌
- 이 객체의 책임이 맞나? -> ⭕
- 이 책임은 다른 객체가 맡는 게 맞지 않나? -> ⭕
6. 핵심 요약
- 클래스는 설계도, 객체는 실체
- 객체는 Heap에 생성되고, 참조 변수는 Stack에 저장
- 객체 간 상호작용은 메서드 호출로 이루어진다
- 객체 지향의 본질은 상속, 문법이 아닌 협력 구조
'Java & Spring > Java' 카테고리의 다른 글
| 생성자&this,this() (0) | 2026.01.06 |
|---|---|
| 메서드 (0) | 2026.01.06 |
| Static (2) | 2026.01.05 |
| 객체의 상태와 변수의 생명주기 (0) | 2026.01.05 |
| 객체지향프로그래밍(OOP) (0) | 2026.01.05 |