기본형과 참조형
- 변수 - 기본형 / 참조형 변수로 분류된다.
- 기본형 변수 : 사용하는 값을 직접 넣을 수 있다.
- 해당 값을 바로 사용할 수 있다.
- 참조형 변수 : 객체가 저장된 메모리의 위치를 가리키는 참조 값을 넣을 수 있다.
- 기본형 변수를 제외한 모든 변수로 객체, 배열 등에 사용된다.
- 객체는 .을 통해 객체에 접근해서 값을 사용할 수 있다.
- 배열은 []를 통해 배열에 접근해서 값을 사용할 수 있다.
- ★ ★ ★ ★ ★ 자바 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다!! ★ ★ ★ ★ ★
- 기본형 => 변수에 들어있는 실제 사용하는 값을 복사해서 대입한다.
- 참조형 => 변수에 들어있는 참조 값을 복사해서 대입한다.
int a = 10;
int b = a;
- 기본형 변수 b에는 변수 a의 값인 10을 복사하여 대입한다.
class Data {
int value;
}
Data dataA = new Data();
dataA.value = 10;
Data dataB = dataA;
- dataB 변수에는 dataA 변수의 참조 값을 복사해서 대입한다.
- 각 변수에는 객체 자체가 들어있는 것이 아니기에 객체 자체를 복사하는 것이 아닌 객체의 참조 값을 복사하기에 같은 위치를 가리키고 있다.
- 한 쪽에서 객체를 참조하여 값을 변경하는 경우, 나머지도 같은 참조 값을 갖고 있기에 값을 변경하는 경우 서로에게 영향을 미칠 수 있다.
- 메소드 호출 시에도 매개 변수에 값을 복사하여 대입한다.
- 자바에서 메소드의 매개 변수는 항상 값에 의해 전달된다.
- 실제 값이냐, 참조 값이냐에 따라 결과가 달라질 뿐 원칙은 같다.
- 메소드 호출자의 값에 영향을 미치는 여부의 차이
- 멤버 변수 vs 지역 변수
- 멤버 변수 : 클래스에 선언된 변수
- 멤버 변수는 객체 생성 시 자동으로 초기화가 된다. (기본 값)
- 지역 변수 : 메소드에 선언된 변수
- 매개 변수도 지역 변수의 일종이다.
- 지역 변수는 수동으로 직접 초기화를 해줘야 한다.
- 멤버 변수 : 클래스에 선언된 변수
- Null
- 값이 존재하지 않는, 없다는 의미
- 참조형 변수에서 아직 가리키는 값이 없을 때 넣어둘 수 있다.
Data data = new Data();
data = null;
- 참조형 변수에 null이 들어가게되면 참조하고 있는 값이 없다는 의미이며, 기존에 참조하던 객체가 있었더라도 참조 값이 없어지게 되므로 참조할 수 없게 된다.
- 예시와 같이 아무도 참조하지 않는 객체의 경우에는 다시 참조 값을 구할 방법이 없다.
그렇기에 다시 객체에 접근할 수 있는 방법도 없어진다. - 아무도 참조하지 않는 객체는 메모리만 차지하게 되므로 JVM의 GC에 의해 자동으로 제거된다.
- 예시와 같이 아무도 참조하지 않는 객체의 경우에는 다시 참조 값을 구할 방법이 없다.
Data data = null;
data.value = 10;
- 참조형 변수 data에 null이 들어간 상태이며 null은 참조할 주소가 존재하지 않는다는 의미
- 참조할 객체가 존재하지 않는데 .으로 객체에 접근을 하면 NullPointerException 예외가 발생하게 된다.
- NullPointerException 발생 시 null 값에 .을 찍었다고 생각하면 문제를 쉽게 찾을 수 있다.
출처 : [인프런 김영한 실전 자바 - 기본편]
김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문
www.inflearn.com
'Java > [인프런 김영한 실전 자바 - 기본편]' 카테고리의 다른 글
[인프런 김영한 실전 자바 - 기본편] 접근 제어자 (0) | 2024.07.16 |
---|---|
[인프런 김영한 실전 자바 - 기본편] 패키지 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 생성자 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 객체 지향 프로그래밍 (0) | 2024.07.15 |
[인프런 김영한 실전 자바 - 기본편] 클래스와 데이터 (0) | 2024.07.15 |