java of educational by contents
[21][IO] Call By Reference, 메소드로 객체의 전달, 메소드로부터 객체 받기 ★
yoni-1117
2018. 12. 8. 15:15
[01] Call By Reference
- 메소드로 객체를 전달하여 공유하는 기법
- JVM은 객체 할당후 정수로된 해시코드를 객체에 부여한다.

- Call By Reference는 2개 이상의 클래스간에 객체전달을 의미하며 전달되는 값은
해시코드로 전달되는 객체의 메모리를 공유하게된다.

- 값을 교체하는 알고리즘
int A = 30;
int B = 50;
int Temp = 0;

int Temp = A
- 메소드로 객체를 전달하여 공유하는 기법
- JVM은 객체 할당후 정수로된 해시코드를 객체에 부여한다.

- Call By Reference는 2개 이상의 클래스간에 객체전달을 의미하며 전달되는 값은
해시코드로 전달되는 객체의 메모리를 공유하게된다.

- 값을 교체하는 알고리즘
int A = 30;
int B = 50;
int Temp = 0;

int Temp = A

A = B;

B = Temp;

1. 메소드로 객체를 전달하기
[실행 화면]
DataTest: 2018699554
su1: 2016
su2: 2017
-------------
DataProcess: 2018699554
su1: 2017
su2: 2016
-------------
DataProcess: 1311053135
su1: 20
su2: 10
-------------
▷ Data.java
-----------------------------------------------------------------------------------
▷ DataProcess.java
▷ oop3.DataTest.java
2. 메소드에서 객체를 리턴 받기
[실행 화면]
▷ oop3.One.java
package oop3;
public class Data {
int su1 = 0;
int su2 = 0;
public Data() {
}
public Data(int su1, int su2) {
this.su1 = su1;
this.su2 = su2;
}
}
-----------------------------------------------------------------------------------
▷ DataProcess.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------package oop3;
public class DataProcess {
public void swap(Data data) {
System.out.println("DataProcess: " + data.hashCode());
int temp = data.su1;
data.su1 = data.su2;
data.su2 = temp;
}
}
▷ oop3.DataTest.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------package oop3;
public class DataTest {
public static void main(String[] args) {
Data data = new Data();
data.su1 = 2016;
data.su2 = 2017;
// 2018699554
System.out.println("DataTest: " + data.hashCode());
System.out.println("su1: " + data.su1); // 2016
System.out.println("su2: " + data.su2); // 2017
System.out.println("-------------");
DataProcess dp = new DataProcess();
dp.swap(data);
System.out.println("su1: " + data.su1); // 2017
System.out.println("su2: " + data.su2); // 2016
System.out.println("-------------");
// 생성자를 이용하여 Data class 객체를 생성
Data data2 = new Data(10, 20);
dp.swap(data2);
System.out.println("su1: " + data2.su1); // 20
System.out.println("su2: " + data2.su2); // 10
System.out.println("-------------");
}
}
2. 메소드에서 객체를 리턴 받기
[실행 화면]
MenuList one: 2018699554
MenuUse one: 2018699554
쫄면, 만두국
김치 찌게, 부대찌게
아이스 커피, 생과일 쥬스
속초 봉포 머구리 물회, 우럭탕
▷ oop3.One.java
-----------------------------------------------------------------------------------
▷ oop3.Two.java
package oop3;
public class One {
String menu = "쫄면";
}
-----------------------------------------------------------------------------------
▷ oop3.Two.java
-----------------------------------------------------------------------------------
package oop3;
public class Two {
String menu = "김치 찌게";
}
-----------------------------------------------------------------------------------
▷ oop3.Three.java
▷ oop3.MenuList.java
▷ oop3.MenuUse.java
▷ oop3.Three.java
-----------------------------------------------------------------------------------
package oop3;
public class Three {
String menu = "아이스 커피";
}
-----------------------------------------------------------------------------------
▷ oop3.Four.java
▷ oop3.Four.java
-----------------------------------------------------------------------------------
package oop3;
public class Four {
String menu = "속초 봉포 머구리 물회";
}
-----------------------------------------------------------------------------------
▷ oop3.MenuList.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------package oop3;
public class MenuList {
public One getMenu1() {//리턴타입이 String이나 int 가 아닌 One이라는 클래스로 선언되어있다.
One one = new One();
System.out.println("MenuList one: " + one.hashCode());
one.menu = one.menu + ", 만두국";
return one;
}
public Two getMenu2() {
Two two = new Two();
two.menu = two.menu + ", 부대찌게";
return two;
}
public Three getMenu3() {
Three three = new Three();
three.menu = three.menu + ", 생과일 쥬스";
return three;
}
public Four getMenu4() {
Four four = new Four();
four.menu = four.menu + ", 우럭탕";
return four;
}
}
▷ oop3.MenuUse.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------package oop3;
public class MenuUse {
public static void main(String[] args) {
MenuList list = new MenuList();
One one = list.getMenu1();
System.out.println("MenuUse one: " + one.hashCode());
System.out.println(one.menu);
Two two = list.getMenu2();
System.out.println(two.menu);
Three three = list.getMenu3();
System.out.println(three.menu);
Four four = list.getMenu4();
System.out.println(four.menu);
}
}