2008년 8월 10일 일요일

Java 매개변수 전달 방식 (Call by Value, Call by Reference)


class problem
{
 int a[]=new int[1];
 int b[]=new int[1];
 static int c[]=new int[1];

 public problem(){
  plus(a);
  plus(b);
  plus(c);
  System.out.println(a[0]+" "+b[0]+" "+c[0]);

 }

 public void plus(int x[]){
  x[0]++;
 }
}

class test
{
 public static void main(String[] args)
 {
  new problem();
 }
}
//답]
// 이 문제의 답을 얻으시려면 님의 생각을 조금 바꾸셔야합니다.
// 언어는 여러 매개변수 전달기법들이 있습니다.
// c 언어일경우 전달기법을 문법으로 프로그램머가 제어가능하지만 
//자바의 경우 자료형에 따라 자동으로 매개변수 전달방식이 결정 됩니다. 
//님의 경우 배열로 해야 Call by Reference 기법이 구현됩니다.

// Call by value : 매개변수의 값을 복사해서 넘겨주는 방식
// Call by reference : 매개변수의 주소값을 넘겨주는 방식

//문]
//사실 실제 작업중인 코드는 아래것이 아니라 좀 더 복잡한건데 
//문제현상을 아래처럼 간단하게 만들어봤습니다.
//제한조건은 다음과 같습니다.
//1. plus()라는 함수가 static int 인자를 받을때도 있고 그냥 
//int 인자를 받을때도 있습니다.
//2. plus() 함수는 void형이어야만 합니다.
//3. plus() 함수 외의 다른 소스부분을 수정해서는 안되고, 
//오로지 plus함수내에서 처리해야만 하는 상황입니다. 
//변경이 아닌 추가메소드같은건 구현가능함..
//4. x=this.a;  x=this.b; x=this.c 이렇게 코딩하면 안됩니다.
// 클래스필드의 투명성이 보장되어 직접 plus가 
//접근할 수 없는 상황입니다;;
//어찌저찌하다보니까 제한조건이 
//저렇게밖에 할 수 없는 상황이네요ㅡㅡ

댓글 없음:

댓글 쓰기

-


Sidewinder


World


FishMusic


LaughingBaby