그림으로 보면 다음과 같습니다. 변수 str에 String 인스턴스가 있는 것이 아니라 다른 메모리 영역에 있는 String이라는 인스턴스를 변수 str이 가리킵니다.
그림 24-1 | str 변수는 String 인스턴스를 참조한다.
즉, str이라는 변수에는 메모리의 위치(주소) 값이 저장됩니다. 메모리에 위치 값을 저장한다 하더라도 어떤 메모리에 저장하는지 그 정보를 아는 방법은 없습니다. 그러므로 str 변수는 String 인스턴스를 참조한다고만 알아두면 됩니다. 앞으로 배울 클래스는 모두 이와 같은 참조형임을 기억해두세요.
참조형 변수에 대해 짧게 정리하겠습니다.
String str = new String("hello");
• str 변수 앞에 기본 자료형이 아닌 String 클래스가 적혀있다.
• (=) 뒤에는 new 다음에 생성자라는 것이 있다.
• new라는 키워드는 클래스를 메모리에 올려준다. 이렇게 메모리에 올라간 클래스를 인스턴스라고 한다.
• 메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스하는 변수가 str이다. 변수가 인스턴스를 가지는 것이 아니라 말 그대로 가리킨다는 의미다.
• str이라는 변수에는 메모리의 위치 값을 저장한다. 어떤 메모리에 저장하는지 알 수 있는 방법은 없기 때문에 str 변수는 String 인스턴스를 참조한다고만 기억한다.
• 앞으로 배울 클래스들은 모두 참조형이다.
NOTE
객체, 클래스, 인스턴스 등 이쯤에서 용어를 한번 정리해볼까요?
객체는 우리가 소프트웨어 세계에 구현해야 할 대상입니다. 객체를 구현하기 위한 설계도가 클래스입니다. 클래스라는 설계도에 따라 소프트웨어 세상에 구현된 실체가 인스턴스입니다.
클래스를 메모리에 올려 인스턴스를 만드는 과정을 인스턴스화라고 합니다. 실체화된 인스턴스는 메모리에 할당됩니다. 인스턴스를 객체라고 불러도 무방합니다. 개념적으로 인스턴스는 객체에 포함된다고 볼 수 있기 때문입니다.