진짜 알겠는데 맨날 까먹는 거 1위 (나만 그러면 말고)
public class Car{
private String model;
private String color;
public Car(String model, String color){
this.model = model;
this.color = color;
}
public void drive(){
System.out.println("drive");
}
}
우리의 이해를 도와줄 예시 코드
Class
- 클래스는 객체를 생성하기 위한 설계도이다.
- 객체의 상태(필드)와 행동(메서드)을 정의한다.
그럼 Car 가 클래스 이겠죠? Car 클래스는 model과 color라는 필드를 가지고 있고, drive라는 메서드를 가지고 있네요!
Object
- 객체는 클래스로부터 구현된 실체이다. 클래스의 인스턴스라고도 한다.
- 객체는 클래스의 속성과 동작을 실제로 구현한 것이다.
- 프로그램 실행 중에 메모리에 할당된다.
Car myCar = new Car("Tesla", "black");
myCar는 Car 클래스의 객체라고 할 수 있죠. 클래스의 속성 model(Tesla), color(black)과 drive 메서드를 사용할 수 있어요!
Instance
- 객체와 같은 의미로 사용된다.
- 특정 클래스의 실체(객체)를 강조할 때 사용된다.
- 클래스가 메모리에 할당된 상태를 말한다.
myCar는 Car 클래스의 인스턴스입니다!
?
선생님 myCar는 Car 클래스의 객체라면서요. 그럼 객체 = 인스턴스인가요? 왜 똑같은 말이 2개나 있죠??????????????????????????????????????????????????????????????????????????????
그거 참 나도 궁금하다.
진짜 따지자면 인스턴스는 특정 클래스의 실체임을 강조할 때 사용된다. 이게 중요하다. 무슨 말인지 알겠는 사람? 당신은 공부 열심히 하셨군요.
객체 생성 과정을 알아보자.
1. 클래스 로드 - JVM이 Car 클래스 구조를 메모리에 로드한다. (클래스의 구조에 대한 정보(필드, 메서드)) -> Method(Static) 영역에 저장된다.
2. 객체 생성 요청 - new 키워드를 통해 Car 클래스의 객체를 생성하라는 요청이 발생한다.
3. 메모리 할당 - JVM은 Heap영역에 Car 객체를 위한 메모리를 할당한다. (필드 포함)
4. 생성자 호출 - JVM은 생성자를 호출하여 객체를 초기화한다. (필드 초기화)
5. 참조 변수 할당 - 생성된 객체의 메모리 주소를 myCar변수에 할당한다. -> myCar는 메모리에 할당된 Car 객체를 참조하게 된다.
뭔가 알겠는가? Car 객체(myCar)가 메모리에 할당된 상태를 인스턴스라고 한다!(강조한다!)
헷갈리쥬? 아님 말고.. 난 헷갈려
myCar에 집중하지 말자. myCar는 그냥 Car 클래스의 인스턴스 중 하나일 뿐이며.. (yourCar도 있을 수 있다.) 메모리에 할당된 Car 객체를 가리킨다.
클래스 로드와 객체 생성은 서로 다른 메모리 영역에서 이루어진다는 걸 알아두자.
'Java' 카테고리의 다른 글
String / StringBuilder / StringBuffer (1) | 2024.06.07 |
---|---|
static과 final (1) | 2024.06.05 |
Java 메모리 - Stack, Heap, Method(Static) (0) | 2024.06.03 |
Java 자료구조 - 배열과 리스트 (0) | 2024.06.02 |
Java 기초 다지기 - 문자열 (1) | 2024.06.02 |