데이터를 주고받는 데에는 값으로 전달(Call by value), 포인터로 전달(Call by pointer), reference로 전달(Call by reference)이 존재한다.
C 언어에서는 값으로 전달하거나 포인터로 주고받는 방식을 구현할 수 있다. 또한 C++에서는(추가로) 참조 자료형을 int&, double&과 같이 기본 자료형에 &를 붙여서 참조 자료형으로 사용할 수도 있다.
자바에서는 모든 것이 객체이므로(객체 지향 언어는 객체간의 상호작용을 중시한다.) 이 객체를 모조리 복사해서 전달하는 것은 비효율적이다. 따라서 기본적으로 메서드에 인자를 전달하거나 리턴 값을 받을 때에 대부분 reference로 전달하는 방식으로 인자가 전달된다.
자바에서 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사하여 넘겨준다. 기본형 타입은 기본형 값이 복사되겠지만, 참조형이라면 인스턴스의 주소를 복사한다.
기본형 타입 Primitive type
자바에서 기본형 타입인 다음과 같은 데이터 형태들 일정 메모리 크기를 차지한다:
- int: 4 바이트
- short: 2 바이트
- byte: 1 바이트
- long: 8 바이트
- char: 2 바이트
참조형 타입 Reference type
기본형 타입을 제외한 모든 타입. 참조형 타입은 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로, 스택 메모리에 저장된다. 참고로, 생성되는 객체는 힙 메모리에 생성된다. 자바에서는 C와 달리 메모리 주소를 노출시키지 않아(포인터 연산자가 없음) 어떤 방식으로 데이터만 전달 되는지만 알고 있으면 될 것이다.
이렇게 참조형으로 데이터를 주고받다보니, 가르키는 곳에 빈 객체가 있다는 것을 나타내는 Null 개념이 생기게 되었다.
Null
무언가가 존재하지 않는 상태를 나타내기위해 만들어졌다. 참조형 자료를 초기화할때 사용하는 것이지, 기본형 자료에는 사용할 수 없다. 대소문자를 구분하며, 소문자로 작성했을 때에만 정상 작동한다.
primitive 자료형이 기본 값을 가지고 있는 것처럼(int는 0, boolean 은 false), 참조형 자료의 기본 값이다.
시리즈
더 읽어보기
9 Things about null keyword and reference in Java (javarevisited.blogspot.com)
'Programming > Java' 카테고리의 다른 글
자바 파일의 실행과정 - 초급 (1) | 2023.11.24 |
---|---|
Expression vs. Statement (1) | 2023.11.23 |
반복문의 라벨 (0) | 2023.11.22 |
Java의 Switch: 14 이후 추가된 기능 (2) | 2023.11.22 |
Java의 char (2) | 2023.11.21 |