yoni
[21][IO] Call By Reference, 메소드로 객체의 전달, 메소드로부터 객체 받기 ★ 본문
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);
}
}
'java of educational by contents' 카테고리의 다른 글
[23][IO] split() 메소드, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★ (0) | 2018.12.08 |
---|---|
[22][IO] Text 파일 복사, Image(Binary 파일) 파일 복사 (0) | 2018.12.08 |
[20][IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록 (0) | 2018.12.02 |
[19][OOP] Amateras UML 툴 설치, 상속(Inheritance), 사용자(개발자) 정의 Exception (0) | 2018.12.02 |
[18][OOP] 예외처리(Exception), throws 문 (0) | 2018.12.02 |
Comments