기본형 매개변수, 참조형 매개변수 차이점
매개변수
- 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)
기본형 매개변수
- change 메서드를 호출할 때, d.x의 값을 매개변수로 복사만 할 뿐 d.x의 값 자체를 바꿀 수 없다.
System.out.println("main() : x = " + d.x);
- println이 호출 되기 전, 괄호 안에 있는 연산이 먼저 수행 ➡ d.x가 먼저 읽힌다.
class Data { int x; }
class Ex6_6 {
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);
}
}
참조형 매개변수
- change 메서드를 호출할 때, 객체 주소 값을 매개변수로 복사하기 때문에 d.x의 값을 변경할 수 있다.
class Data2 { int x; }
class Ex6_7 {
public static void main(String[] args) {
Data2 d = new Data2();
d.x = 10;
System.out.println("main() : x = " + d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() : x = " + d.x);
}
static void change(Data2 d) { // 참조형 매개변수
d.x = 1000;
System.out.println("change() : x = " + d.x);
}
}
참조형 반환타입
- 반환 타입이 참조형이면 객체의 주소를 반환
class Data3 { int x; }
class Ex6_8 {
public static void main(String[] args) {
Data3 d = new Data3();
d.x = 10;
// copy()
// 1. static 키워드가 붙어있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
// 2. 같은 클래스 내에 있는 메서드이기 때문에 객체 생성 없이도 메서드 호출 가능
Data3 d2 = copy(d);
System.out.println("d.x ="+d.x);
System.out.println("d2.x="+d2.x);
}
static Data3 copy(Data3 d) {
Data3 tmp = new Data3();
tmp.x = d.x;
return tmp; // 복사한 객체의 주소를 반환한다.
}
}
'JAVA > 객체지향개념' 카테고리의 다른 글
오버로딩 (Overloading) (0) | 2021.03.11 |
---|---|
Instance 메서드 vs Static 메서드 (0) | 2021.03.11 |
호출 스택 (Call Stack) (0) | 2021.03.07 |
메서드 (Method) (0) | 2021.03.06 |
선언위치에 따른 변수종류 (0) | 2021.03.06 |
댓글
이 글 공유하기
다른 글
-
오버로딩 (Overloading)
오버로딩 (Overloading)
2021.03.11 -
Instance 메서드 vs Static 메서드
Instance 메서드 vs Static 메서드
2021.03.11 -
호출 스택 (Call Stack)
호출 스택 (Call Stack)
2021.03.07 -
메서드 (Method)
메서드 (Method)
2021.03.06