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
 

 
 
   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 

-----------------------------------------------------------------------------------
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 
-----------------------------------------------------------------------------------
package oop3;
 
public class One {
  String menu = "쫄면";
}
  
-----------------------------------------------------------------------------------
 
 
▷ oop3.Two.java 
-----------------------------------------------------------------------------------
package oop3;
 
public class Two {
  String menu = "김치 찌게";
}
 
 
-----------------------------------------------------------------------------------
  
 
▷ oop3.Three.java 

-----------------------------------------------------------------------------------
package oop3;
 
public class Three {
  String menu = "아이스 커피";
}
 
 
-----------------------------------------------------------------------------------
 
 
▷ 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);
    
  }
 
}
 
    
-----------------------------------------------------------------------------------
  
 


Comments