기본형 매개변수
class Data { int x; }
class PrimitiveParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main() : x = " + d.x);
}
static void change(int x) { // 기본형 매개변수
x = 1000;
System.out.println("change() : x = " + x);
}
}
//결과
//main() : x = 10
//change() : x = 1000
//After change(d.x)
//main() : x = 10
기본형 매개변수라 읽기만 가능하다.
→ 값을 바꿀 수가 없다.
참조형 매개변수
class Data { int x; }
class ReferenceParamEx {
public static void main(String[] args) {
Data d = new Data();
d.x = 10;
System.out.println("main() : x = " + d.x); //main() : x = 10
change(d);
System.out.println("After change(d)"); //After change(d)
System.out.println("main() : x = " + d.x); //main() : x = 1000
}
static void change(Data d) { // 참조형 매개변수
d.x = 1000; //**
System.out.println("change() : x = " + d.x); //change() : x = 1000
}
}
change(d) - 객체 값을 준 게 아니라 객체 자체를 줘버림. = 객체 주소를 줌
→ 받은 객체 멤버변수의 값을 읽고 변경할 수도 있다.
❓change(d)가 가능한 이유
copy()가 static이어서, 같은 클래스 내에 있어서 메서드 이름만으로 호출가능
→ 원래는 객체 생성하고 객체. copy();로 호출해야 한다.
참조형 반환타입
class Data3 { int x; }
class ReferenceReturnEx {
public static void main(String[] args)
{
Data3 d = new Data3();
d.x = 10;
Data3 d2 = copy(d);
System.out.println("d.x = " + d.x); //d.x = 10
System.out.println("d2.x = " + d2.x); //d2.x = 10
}
static Data3 copy(Data3 d) {
Data3 tmp = new Data3(); // 새로운 객체 tmp를 생성한다.
tmp.x = d.x; //d.x의 값을 tmp.x에 복사한다.
return tmp; //복사한 객체의 주소를 반환한다.
}
}
참조형을 반환한다는 것은 객체의 주소를 반환한다는 것이다.
객체 주소는 그냥 정수다. = int
개념적으로 어려울 뿐, 익숙하지 않아서다.
'📝 끄적끄적 > 🖥️ 자바의 정석' 카테고리의 다른 글
[자바의 정석] 제어자, 캡슐화 (0) | 2023.09.24 |
---|---|
[자바의 정석] 상속, 참조변수 super, 생성자 super() (0) | 2023.09.23 |
[자바의 정석] 생성자, 변수/멤버 변수의 초기화 (0) | 2023.09.22 |
[자바의 정석] static 메서드와 인스턴스 메서드, 오버로딩 (0) | 2023.09.21 |
[자바의 정석] 클래스 변수와 인스턴스 변수, 호출스택 (0) | 2023.09.19 |
[자바의 정석] 클래스와 객체 (0) | 2023.09.17 |