레퍼런스 - 주소를 가르키는 변수
C에서 배열을 가르키는 주소(레퍼런스)는 배열의 0번째 인덱스의 주소지만 자바는 배열 이름의 레퍼런스 변수가 따로 존재하고 실제 배열은 다른 주소부터 시작됩니다.
자바에서 배열을 만들 때는 레퍼런스 선언을 해주어야 하고
레퍼런스 변수에 배열을 동적 할당하는 식으로 동작하기 때문에 배열 생성시 무조건 동적할당을 해야합니다.
배열 선언시엔 크기를 정하지 못하고 밑 그림 처럼 동적 할당으로 초기화 할 때 크기를 정해야합니다.
레퍼런스 변수는 동적 할당으로 만든 배열의 첫번째 인덱스 주소를 가르키게 됩니다.
2차원 배열은 행의 갯수 만큼의 레퍼런스 변수를 가지게 됩니다.
행의 갯수만큼의 레퍼런스를 가지고 있는 배열이 생성되고 그 배열의 각 인덱스는 각 행의 첫번째 인덱스 주소를 저장하고 있는 식입니다.
또한 밑 그림 처럼 각 행마다 동적 할당을 따로 수행해주어 각 행의 갯수를 지정할 수 도 있습니다.
만약 따로 수행하지 않으면 위 그림처럼 모든 행의 크기가 똑같은 배열이 생성됩니다.
자바는 C와 다르게 포인터를 사용하지 않습니다.
때문에 배열을 리턴할 때도 해당 배열의 레퍼런스 변수를 리턴하면 리턴받은 변수는 배열의 첫번째 주소를 참조하여 사용 가능합니다.
자바에서는 객체도 배열과 마찬가지로 객체에 대한 레퍼런스 변수로 객체에 접근하기 때문에 무조건 동적할당을 수행해야 합니다.
위는 Cicle 클래스 객체의 레퍼런스로 pizza 변수를 선언하고 Circle로 동적 할당 하는 그림입니다.
garbege collection
배열이나 객체가 동적할당으로 생성되면 C에선 delete라는 함수를 사용해 수동으로 해제했습니다.
그러나 자바에선 동적 해제 함수가 존재하지 않고, 그 대신 JVM이 사용하지 않는 객체, 레퍼런스가 참조하지 않는 객체를 검사하여 자동으로 할당을 해제해주는데, 이것을 Garbege Collection이라고 합니다.
가비지 컬렉션은 가비지 컬렉터라는 스레드가 주기적으로 발생하여 수행됩니다.
System.gc() 함수를 사용하여 가비지 컬렉션을 호출할 수도 있습니다.
'CS > JAVA' 카테고리의 다른 글
자바 - 상속 (0) | 2022.04.10 |
---|---|
자바 - static & final (0) | 2022.04.10 |
자바 - 접근 지정자 (0) | 2022.04.07 |
자바 - this와 생성자 오버로딩 (0) | 2022.04.06 |
JAVA : 독립성, JVM, 개발(jdk) & 실행 환경(jre), bin파일 (0) | 2022.04.04 |