2016년 7월 3일 일요일

인자 전달 방법


java나 c언어에서는 리턴값을 하나만 넘겨 받을 수 있기 때문에 넘겨주는 인자의 값이 알아서 바뀌면 어떨까라는 고민을 많이 했었다.
고전적인 논쟁이 될 수 있는 call by value 냐 call by reference냐 에 대한 얘기를 하고자 하는것은 아니고 왜 이러한 내용이 필요한가에 대해서 언급하고 싶었을 뿐이다.
물론 java,c에서도 구조체를 넘겨 받을 수 있지만 항상 하나라는 갯수는 정해져 있다.
넘겨주는 인자에서 값을 변경하게 하려면 class를 넘겨주는 방법이 있을 수 있다.
fun_2 를 보면 알 수 있다.
비슷하게 String도 class이니까 fun_3 에 나타난것처럼 해봤지만 결과는 좋지 않다.
만약 String class내부에 string을 변경할 수 있는 method를 제공해줬다면 결과는 달라질 수 있겠지만, 아무리 검색해봐도 그런 method는 존재하지 않았다.

public class Param {
 public static void main(String[] args) {
  int a1,b1;
  a1 = 1; b1 = 2;
  fun_1(a1,b1);
  System.out.println("a:"+a1+"b:"+b1);

  PClass a2 = new PClass(1);
  PClass b2 = new PClass(2);
  fun_2(a2,b2);
  System.out.println("a:"+a2.val+"b:"+b2.val);

  String a3="1";
  String b3="2";
  fun_3(a3,b3);
  System.out.println("a:"+a3+"b:"+b3);
 }

 private static void fun_1(int a, int b) {
  a = 3;
  b = 4;
 }
 
 public static class PClass{
  public int val;
  public PClass(int v)
  {
   super();
   val=v;
  }
 }
 private static void fun_2(PClass a, PClass b) {
  a.val = 3;
  b.val = 4;  
 }

 private static void fun_3(String a, String b) {
  a = "3";
  b = "4";  
 }

}

결과
a:1b:2
a:3b:4
a:1b:2






댓글 없음:

댓글 쓰기