728x90
기본형 vs 참조형
기본형 vs 참조형
- 자바에서 참조형을 제대로 이해하는 것이 정말 중요
- 변수의 데이터 타입을 크게 기본형과 참조형으로 분류 가능
- 기본형: 사용하는 값을 변수에 직접 넣을 수 있음 (int, long, double, boolean)
- 참조형: 객체가 저장된 메모리의 위치를 가리키는 참조값을 넣을 수 있는 참조형 (객체, 배열. Student student1)
- Data dataB = dataA 와 같이 복사하면 같은 인스턴스를 가리키기 때문에 dataA.value의 값을 바꾸면 dataB.value도 바뀜
- 메서드의 파라미터도 결국 변수. 그러므로 호출부에서 인자가 넘어올 때 값이 복사됨
- 기본형 메서드 호출: 전달받은 파라미터를 메서드 내에서 값을 바꿔도 외부에 영향을 주지 않음
- 참조형 메서드 호출: 객체, 클래스처럼 참조가 인자로 전달된다면 참조 값을 복사함 -> 같은 인스턴스를 가리키고 값을 바꿈
변수와 초기화
- 멤버 변수: 자동 초기화
- 인스턴스의 멤버 변수는 인스턴스를 생성할 때 자동으로 초기화 됨
- int = 0, boolean = false, 참조형 = null (null 값은 참조할 대상이 없다는 뜻으로 사용)
- 개발자가 초기값을 직접 지정할 수 있음
- 지역 변수: 수동 초기화
- 지역 변수는 항상 직접 초기화 해야함
참고로 자바는 타입을 가지는 정적타입 언어지만, 자바스크립트는 동적타입 언어기 때문에 멤버 변수가 초기화되지 않겠군
null
- null은 변수에 아직 가리키는 객체가 없다는 뜻
- 참조를 더 이상 하는 곳이 없으면 JVM의 GC가 자동으로 메모리에서 제거해 준다.
- 함수 내 지역 변수들은 함수가 끝나면 GC에 의해 제거됨
- GC도 최적화가 잘 되어 있음
NullPointerException
- 참조값 없이 객체를 찾을 때 발생
- 개발자들을 가장 많이 괴롭힘
- 객체를 생성한 경우 참조형 멤버 변수는 null로 초기화 됨
- 호출부에서 data.value와 같이 참조할 경우 nullPointerException 발생
- null 값에 .(dot)을 찍었다고 생각
Tip
- 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.
- 자기 package에 있는 클래스는 import를 따로 하지 않는다.
728x90
'프로그래밍 > Java' 카테고리의 다른 글
[실전 자바-기본편] 접근 제어자 (0) | 2024.02.11 |
---|---|
[실전 자바-기본편] 패키지 (0) | 2024.02.09 |
[실전 자바-기본편] 생성자 (0) | 2024.02.08 |
[실전 자바-기본편] 객체 지향 프로그래밍 (0) | 2024.02.05 |
[실전 자바-기본편] 클래스와 데이터 (0) | 2024.02.03 |
댓글