1. 메모리 종류
- stack : 기본형 변수가 저장되는 공간
- heap : 참조형, 객체 정보가 저장되는 공간
2. 서론
강의를 듣다보면 메모리에 객체의 인스턴스가 저장된다 라는 이야기를 듣는다 하지만 그걸 설명하라고 하면 잘 못하는 경우가 있다 그래서 공부를 해봤다 참조형은 왜 '참조'이고 같은 곳을 바라본다는게 어떤 의미인지 알아보자
3. 코드
// Animal 클래스
class Animal {
int id;
Animal(int id){
this.id = id;
}
}
위의 Animal이라는 클래스에는 id라는 변수가 존재한다
Animal dog= new Animal(12);
Animal cat = new Animal(15);
Animal 클래스를 활용해서 인스턴스를 두가지 만들었다
4. 메모리
그럼 저기 위에 적힌 코드들이 어떻게 메모리에 저장이 되는지 알아보자
우선 Animal이라는 클래스는 '클래스'라고도 불리지만 사실 참조형 변수이다 예를 들면 자주 쓰는 String같은 것들이 있겠다 기본형인 변수들은 앞글자를 소문자로 쓴다 예를들면 int, boolean등이 있다. 하지만 String은 대문자로 시작한다 이것은 자바에서 미리 만들어 놓은 클래스 이기 때문이다. 사용자 정의(커스텀)로 참조형 변수를 만드는 과정이 클래스를 만드는 것이다
Stack | ||
Location | Value | Variable-name |
A | 3. 5 | i |
B | ||
C | 4. 1A | dog |
D | 5. 1C | cat |
E | ||
F |
Heap | |
Location | Object |
1A | 1. Animal12 |
1B | |
1C | 2. Animal15 |
1D | |
1E | |
1F |
위의 표에 숫자로 들어가는 순서를 표현하겠다
1. 모든 객체는 Heap에 저장된다, 즉 1A에 Animal(12)가 저장된다
2. 마찬가지로 Animal(15)가 1C에 저장된다
3. 기본 변수들은 Stack에 저장된다, 즉 로컬변수를 생성하면 Stack에 저장된다 여기서는 A라는 공간에 i = 5를 저장하겠다
4. Animal이라는 객체는 dog안에 들어가 있다. 그렇다면 dog는 변수다 변수는 Stack에 저장된다 하지만 여기서 중요한 점은 객체가 저장된 주소를 담는다는 것이다
5. 똑같은 원리로 cat도 주소를 저장해준다
5. 결론
중요한 점은 객체를 담은 변수를 저장할때 객체의 주소값을 저장한다는 것이다. 우리가 dog.메소드 이렇게 메소드를 호출한다면 dog 에
저장된 객체의 주소값에서 메소드를 가져오는 것이다.
'IT 연구소' 카테고리의 다른 글
자바예제 수정하며 jsp액션 공부하기 (0) | 2023.09.05 |
---|---|
싱글톤 패턴에서의 jdbc와 db연동 (0) | 2023.09.05 |
다형성 (0) | 2023.08.15 |
type casting (0) | 2023.08.14 |
중첩 인터페이스 (0) | 2023.08.06 |