본문 바로가기

Java

Class, Object, Instance

진짜 알겠는데 맨날 까먹는 거 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