변수란?
일반 변수와 참조 변수를 이해하기 위해서는 먼저 변수를 알아야 한다.
변수는 변수만으로 사용할 수 없고 리터럴과 합쳐져야한다.
변수는 상자에 물건을 담을 때 상자에 해당하고 리터럴(값)은 물건에 해당한다.
코드로 보면 변수는 int i = 1 ; 일 때 i 이고 리터럴(값)은 1에 해당한다.
여기까지 이해했으면 일반 변수와 참조 변수를 구분 할 수 있다.
일반 변수란?
일반 변수는 위에서 코드로 적혀 있는 int i = 1 ; 와 같은 형식이다.
일반 변수 종류에는 byte, char, short, int, float, long, double, boolean 와 같은 종류로 있다.
이 친구들은 stack 영역에 존재하는데 한 덩어리로 존재한다. (int i = 1) 이런식으로
그럼 한 덩어리로 존재하지 않는 친구들이 있는데 그 친구들이 바로 참조 변수이다.
stack에 변수가 생기는 시점은 (int i ; ) <- x // (int i = 2 ;) <- o 처럼 변수 i 에 리터럴(값)이 주어져야한다,
참조 변수란?
참조 변수는 일반 변수와 다르게 (주소를 가르키는 놈 + 해당 주소에 값을 가진 놈) 으로 존재한다.
주소를 가르키는 놈은 일반 변수가 존재하는 stack 영역에 같이 존재하고 heap 1영역에는 값을 가진 놈이 존재한다. 2
stack 영역 속에서 삿대질하고 있는거다. heap 영역속에 값을 가지고 있는 친구에게. 이걸 참조 라고 한다.
int[ ] arr = new int[10]; arr이 주소 값을 가지고 있고 그 주소가 가르키는 곳에는 int[10]; 값을 가지고 있는 친구들이 있다.
(int[ ] arr = null;) <- 처럼 일반적으로 주소 값이 있지만 heap 영역에 참조할 값이 없는 경우(null) garbage collector가 와서 수거해버린다.
이해가 안가면 외워라, 외우다보면 언젠가 이해될 날이 온다. -김정범 교수님.
'JAVA 정리노트' 카테고리의 다른 글
JAVA 상속 (0) | 2024.01.23 |
---|---|
JAVA static과 객체배열에 대한 정리 (0) | 2024.01.22 |
JAVA 메서드, 클래스와 생성자, 메서드 오버로딩 (0) | 2024.01.18 |
JAVA 배열에 대한 정리 (0) | 2024.01.17 |
System.out.println("1주차_JAVA정리노트"); (0) | 2024.01.13 |