우주코딩
레퍼런스 변수의 데이터 크기, 레퍼런스와 인스턴스의 크기 본문
레퍼런스 변수의 데이터크기
앞의 어떤 데이터 타입의 주소를 저장할 지 상관 없이 레퍼런스의 메모리크기는 4byte로 동일하다.
주소를 저장할 수 있는 크기 4byte 혹은 8byte가 있을 수 있다.
하지만 특별한 경우가 없으면 레퍼런스의 크기는 4byte 이다.
타입 별 레퍼런스의 크기
Vehicle - maker
Car - model /Vehicle 상속
Sedan -auto /Car상속
Truck - weight /Car상속
Vehicle v;
Car c;
Sedan s;
Truck t;
타입에 상관없이 레퍼런스 변수의 크기는 4바이트로 같다. 주소를 저장하는 변수이기 때문이다.
타입별 인스턴스 크기
타입(클래스, 인터페이스, 배열)
new Car();
- 수퍼클래스의 인스턴스 변수 생성
maker - 해당 클래스의 인스턴스 변수 생성
maker-model-기타 부가정보
new Vehicle();
- 해당 클래스의 인스턴스 변수 생성
maker-기타 부가정보
ㄴVehicle 설계도에 따라 heap에 만든 변수들
==>Vehicle 클래스의 인스턴스
==>Vehicle 클래스의 객체
==>Vehicle 인스턴스/객체
new Sedan();
- 수퍼클래스의 인스턴스 변수 생성
maker-model - 해당 클래스의 인스턴스 변수 생성
maker-medel-auto-기타부가정보
Vehicle r1 = new Vehicle();
r1은 Vehicle 클래스의 인스턴스 주소를 저장하는 변수다. = Vehicle 객체의 주소를 저장하는 변수.
Vehicle (Type = Class, interface)
Car r1 = new Vehicle(); // 안됨!!! new Vehicle 로 만든 변수들엔 Car 설계도의 변수가 없다.
r1 은 Car 객체의 주소를 저장하는 변수, Car 설계도에 따라 만든 인스턴스 변수가 있는 객체의 주소를 저장할 수 있다.
Vehicle r1 = new Car(); // ok
maker-model
수퍼클래스의 변수까지 만들었기 때문에
레퍼런스도 자식클래스의 인스턴스를 저장할 수 있는 것이다.
r1은 Vehicle 타입의 변수이기 때문에
r1.maker는 가능하지만 r1.model은 접근 불가능하다.
model에 접근하고싶다면 형변환을 해주어야한다.
((Car)r1).model
'자바 본 강의' 카테고리의 다른 글
Object 클래스와 toString() 메서드 (0) | 2021.08.09 |
---|---|
추상 멤버 사용하기 (0) | 2021.08.09 |
접근 권한, factory-method, singleton, 추상화 (0) | 2021.08.03 |
캡슐화, 게터와 세터 (0) | 2021.07.31 |
레퍼런스 형변환, 오버라이딩의 리턴타입, 오버라이딩과 메서드 호출, final (0) | 2021.07.31 |