안녕, 아미고! 변수의 내부 구조에 대해 말씀드리고자 합니다. 이미 알고 있듯이 각 변수는 해당 값이 저장되는 메모리 영역과 연결됩니다. "

"네. 저번에 말씀하셨잖아요."

"좋습니다. 기억해 주셔서 감사합니다. 그럼 계속하겠습니다."

"모든 복합 유형은 더 간단한 유형으로 구성됩니다. 그리고 차례대로 더 간단한 유형 으로 구성됩니다. 마침내 우리는 더 이상 단순화할 수 없는 기본 유형으로 끝날 때까지 기본 유형 이라고 합니다 . 예를 들어 int 는 기본 유형이지만 String은 데이터를 문자 테이블로 저장하는 복합 유형입니다(여기서 각 문자는 기본 유형 char 임 )."

"아주 흥미롭군. 계속해."

"복합 유형은 단순 유형을 그룹화하여 형성됩니다. 이러한 유형을 클래스 라고 합니다 . 프로그램에서 새 클래스를 정의할 때 새 복합 데이터 유형을 선언합니다 . 해당 데이터는 다른 복합 유형 또는 기본 유형이 됩니다."

자바 코드 설명
public class Person
{
   String name;
   int age;
}
새로운 복합 유형이 선언되었습니다 – Person. 그 데이터는 (복합형) 변수 와 (기본형) 변수
에 저장됩니다.Stringnameintage
public class Rectangle
{
   int x, y, width, height;
}
새로운 복합 유형이 선언되었습니다 – Rectangle. 4개의 (기본 유형) 변수
로 구성됩니다 .int
public class Cat
{
   Person owner;
   Rectangle territory;
   int age;
   String name;
}
새로운 복합 유형이 선언되었습니다 – Cat. 다음과 같은 변수가 있습니다.
owner, 복합 유형 Person
territory, 복합 유형 Rectangle
age, 기본 유형 int
name, 복합 유형String

"아무리 이상하게 보일지라도 지금은 모든 것이 명확합니다."

"큰(복합) 유형에는 많은 작은(기본) 유형이 포함되어 있습니다. 그렇기 때문에 이러한 유형의 개체는 기본 유형의 변수보다 더 많은 메모리를 차지합니다. 때로는 훨씬 더 많습니다. 이러한 변수로 할당 작업을 수행하는 데 오래 걸리는 데 사용됩니다. 시간이 걸리고 메모리의 큰 부분을 복사해야 했기 때문에 복합 유형의 변수는 개체 자체를 저장하지 않고 개체에 대한 참조, 즉 4바이트 주소만 저장합니다. 이것은 이러한 개체의 데이터를 처리하기에 충분합니다. Java 머신은 관련된 모든 복잡성을 처리합니다."

"나는 그 어떤 것도 이해하지 못했다."

"우리는 이전에 변수가 상자와 같다고 말했습니다. 13이라는 숫자를 저장하고 싶다면 종이에 13을 써서 상자에 넣으면 됩니다."

"하지만 상자(변수)에 더 큰 것을 저장해야 한다고 상상해 보세요. 예를 들어 개, 자동차 또는 이웃입니다. 밀 수 없는 것을 상자에 밀어 넣으려고 하는 대신 사진을 사용하여 더 쉽게 할 수 있습니다. 실제 개 대신 개, 실제 자동차 대신 번호판, 이웃 대신 이웃 전화 번호."

"우리는 종이 한 장을 가져다가 이웃의 전화번호를 적습니다. 이것은 물체에 대한 참조와 같습니다. 이웃의 전화번호가 적힌 종이를 복사하여 여러 상자에 넣으면 이제 더 많은 참조가 있습니다. 하지만 이전과 마찬가지로 여전히 이웃이 한 명뿐입니다. 말이 됩니까?"

"이러한 방식으로 데이터를 저장하는 중요한 기능은 단일 개체에 대한 많은 참조를 가질 수 있다는 것입니다 ."

"얼마나 흥미롭군! 거의 알아냈어. 한 번 더 말해줘. 복합 유형의 변수를 동일한 복합 유형의 다른 변수에 할당하면 어떻게 될까?"

"그러면 두 변수는 같은 주소를 저장합니다. 즉 , 한 변수가 참조하는 개체의 데이터를 변경하면 다른 변수가 참조하는 데이터도 변경됩니다 . 두 변수 모두 동일한 개체를 참조합니다 . 물론 많을 수 있습니다. 참조를 저장하는 다른 변수입니다."

"복합(참조/클래스) 유형의 변수는 개체에 대한 참조를 보유하지 않는 경우 어떻게 합니까? 가능합니까?"

"예, 아미고. 당신은 당신의 질문에 나보다 앞서 가고 있습니다. 그것은 가능합니다. 참조(복합) 유형의 변수가 객체에 대한 참조를 저장하지 않는 경우 '널(null)'로 알려진 것을 저장합니다. 기본적으로 이것은 주소가 0인 객체를 참조한다는 것을 의미합니다. 그러나 Java 머신은 이 주소로 객체를 생성하지 않으므로 참조 변수에 0이 포함되어 있으면 어떤 객체도 가리키고 있지 않다는 것을 항상 알고 있습니다. ."

자바 코드 설명
String s;
String s = null;
동등한 진술.
Person person;
person = new Person();
person = null;
값이 null인 개인 변수를 만듭니다.
새로 생성된 Person 개체의 주소를 할당합니다.
변수에 null을 할당합니다.
Cat cat = new Cat();
cat.owner = new Person();
cat.owner.name = "God";
Cat 객체를 생성하고 그 주소를 변수 cat에 저장합니다. cat.owner는 null과 같습니다.
새로 생성된 Person 개체의 주소와 동일하게 cat.owner를 설정합니다.
cat.owner.name은 여전히 ​​null입니다.
우리는 cat.owner.name을 "신"과 동일하게 설정했습니다.

"내가 제대로 이해했나요? 변수는 기본 유형과 참조 유형의 두 가지 유형으로 나뉩니다. 기본 유형은 값을 직접 저장하는 반면 참조 유형은 개체에 대한 참조를 저장합니다. 기본 유형에는 int, char, boolean 등이 있습니다. 참조 유형에는 다른 모든 것이 포함됩니다. 클래스를 사용하여 생성합니다."

"네 말이 맞아, 내 아들."

"그래서 당신은 모든 것을 이해했다고 말했습니다. 다음은 당신의 지식을 강화하는 데 도움이 되는 몇 가지 작업입니다."