티스토리 뷰

이렇게 생긴 예제가 있다고 하자. 

class Robot {}

public class Test {
    public static void main(String[] args) {
        Robot r = new Robot();
    }
}

여기서, 

Robot r = new Robot();

오늘은 이 한 줄을 깊게 파볼 것이다. 

일단 각각 의미부터 파헤쳐보자.  ( gpt 형님 )

 

  | 부분 |                      | 의미 |                                  | 역할 |

 

Robot 타입(Type)
➡ 클래스거나 인터페이스일 수 있음
참조 변수 a가 어떤 종류의 객체를 담을 수 있는지 정함
r 참조 변수(Reference Variable) 객체(인스턴스)의 주소를 저장함
new Robot() 인스턴스(Instance) 실제로 메모리에 생성된 객체
= 대입 연산자 a가 new Dog() 객체를 참조하도록 연결

의미는 이렇게 간단하게 정리할 수 있다. 하지만, 나는 참조변수, 인스턴스와 객체의 차이에 대해서 궁금해서 더 알아보기로 했다.

 

■ 참조변수 : “어떤 객체(인스턴스)의 **주소(레퍼런스)**를 저장하는 변수” 이다. 

좀더 감을 잡기 위해서 참조변수가 사용되는 큰 3가지 경우를 정리해보자.  ( gpt 형님 )

 

📌 예제 1: 생성할 때

Dog d = new Dog(); // d는 참조변수

➡ new Dog()를 통해 객체 생성하고, d에 주소를 저장
➡ 이때 d는 참조변수임.


📌 예제 2: 파라미터로 전달할 때

void printDog(Dog d) {
	d.bark(); 
}

➡ 메서드의 매개변수 d도 참조변수임.
➡ 이미 생성된 객체를 전달받은것이니, 객체 주소를 저장하고 있음


📌 예제 3: 반환값으로 받을 때

Dog getDog() {
	return new Dog(); 
} 

Dog myDog = getDog(); // myDog도 참조변수!

➡ getDog()가 반환한 객체를 myDog에 담음
➡ 이 myDog 역시 참조변수

 

참조변수, 인스턴스의 저장 공간은 다음과 같이 짧게 요약할 수 있다. 

참조 변수는 Stack에 저장되고, 실제 객체는 Heap에 저장됨.

 

+)

참고로,  자바는 메모리를 크게 아래 3가지로 나눠서 관리함.

🧠 1. Stack(스택 메모리)

  • 메서드가 호출될 때 생성되는 공간
  • 지역변수, 매개변수, 참조 변수들이 저장됨!
  • 참조 변수(예: Animal a)는 여기 저장됨!

🧱 2. Heap(힙 메모리)

  • new로 생성한 **객체(인스턴스)**가 저장되는 공간
  •  즉, new Dog()로 생성된 진짜 객체는 여기에 있음

🧙 3. Method Area(또는 Metaspace)

  • 클래스, static 변수, 메서드 정의 등이 저장되는 곳
  • 클래스가 로딩될 때 메서드 영역에 올라감

 

이제 객체와 인스턴스의 차이에 대해서 알아보자.

 

■ 객체 (Object) : 클래스 기반으로 만들어진 모든 실체

■ 인스턴스 (Instance) : 객체 중에서, 특정 클래스의 변수에 담긴 실체

 

예제로 이해하자!!

class Dog {
    String name;
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();  // 객체 생성됨!
    }
}
  • new Dog() ➡ 객체
  • myDog ➡ Dog 클래스의 인스턴스

즉, 그 객체가 "Dog"라는 클래스의 변수에 담겼을 때,
그때 그 객체를 "Dog 클래스의 인스턴스"라고 부르는 것!!!! 

 

 

여기서,

모든 인스턴스는 객체임.
❌ 하지만 모든 객체가 반드시 인스턴스인 건 아님.

 

이번 포스팅에서는 모든 객체가 반드시 인스턴스인 건 아님이 경우에 대해서 정리해볼 것이다. 

 

일단 한 줄로 정리하자면, 다음과 같다.

"객체의 타입이 불명확할 때, 즉 어떤 클래스의 인스턴스인지 명확히 알 수 없을 때"

( 자바에서 Object 타입으로 다룰 때가 대표적인 예시이다.) 

(예제)

Object obj = new Object(); // ← 여기서 obj는 그냥 "객체"

obj는 단순히 Object 타입의 객체이다. 즉, 나 Cat처럼 특정 클래스의 인스턴스는 아님.

따라서, 그래서 "그냥 객체"라고 부를 수는 있지만 "Dog의 인스턴스"라고는 할 수 없다. 

 

 

 

오늘은 여기까지.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함