자바는 크게 두개의 데이터 타입을 사용한다.
void main() {
int v = 42;
System.out.println(v); // 42
method(v);
System.out.println(v); // 42
}
void method(int v) {
v = v * 2;
}
void main() {
Data v = new Data(); // v는 레퍼런스 타입
v.d = 42;
System.out.println(v.d); // 42
method(v);
System.out.println(v.d); // 84
}
void method(Data v) {
v.d = v.d * 2;
}
class Data {
int d;
}
내가 만든 메소드가 Call by value인지, Call by Reference 인지 구분하자. 레퍼런스일때는 원본 데이터가 훼손되지는 않는지 주의하자.
Mutable / Immutable
변경할 수 있는 값을 mutable, 변경할 수 없는 값을 immutable 이라 한다.
final+primitive 값은 변경할 수 없으니 immutable 이라 한다.
하지만 final+reference 의 경우, 변경되지 못하기는 하지만 변경되지 못하는 값은 변수가 담고 있는 참조 주소값이 된다. 즉, 참조 변수가 가리키는 인스턴스를 변경할 수는 없다. 그렇다고 그것이 변수가 가리키는 인스턴스의 내용을 변경할 수 없다는 것을 의미하지는 않는다.