Sidewinder


World


FishMusic


LaughingBaby


Sunday, August 10, 2008

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가 접근할 수 없는 상황입니다;;
//어찌저찌하다보니까 제한조건이 저렇게밖에 할 수 없는 상황이네요ㅡㅡ

No comments:

Post a Comment