일단 해보는 코딩/Java

[Java] 함수(메써드) 호출 방식

eun_zoey2 2022. 7. 26. 15:42
728x90
메써드 호출 방식

    메써드 호출은 함수 호출과 같이 메써드_명( )를 사용하면 메써드의 내용이 실행된다. 

    여기서는 call by value(값에 의한 호출)이라는 '깊은 복사' 방식은 값을 복사해서 그 값을 사용하는 방식이고, 

    call by reference(주소에 의한 호출)는 얇은 복사방식은 메모리 주소를 참조해서 거기에 들어 있는 값을 꺼내서 사용하는 방식.

 

    예제 1)

 

package Java07;

public class Test04 {
	void hello() {
		System.out.println("안녕?");
	}
	static void hell() {	//static은 정적이라는 의미로 고정되어 있다는 의미
		System.out.println("Hello?");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test04 ex = new Test04();	// 클래스에서 객체 생성 후 사용
		ex.hello();
		hell();
		/* static 이 붙은 클래스에서는 객체를 생성하지 않아도 hell(); 식으로 메써드를 호출할 수 있다. 
		 static 이 붙으면 프로그램 실행 시 자동으로 메모리에 올라가서 실행되기 때문이다. */
		 for (int i=1; i<=10; i++) {
			 ex.hello();
			 hell();
			 
		 }
		
	}

}

   

  예제 2)

 

package Java07;

class A {
	void a(int x) {
		System.out.println("인수는 " + x);
	}
}
public class Test06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A x = new A();
		x.a(5);

	}

}

 

  예제 3)

 

package Java07;

public class Test09 { // Call by reference
	static void test1(int [] n) {
		System.out.println(n);	//배열의 시작주소 
		for(int i=0; i<n.length; i++) {
			System.out.println(n[i]);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] num = {10,20,30,40,50};
		System.out.println(num); //배열의 시작주소 
		test1(num);	//Call by reference
	// test1(num[0],num[1],num[2],num[3],num[4]); 하면 Call by value
	}

}

 

반환 값

    반환값은 return으로 표시하는데 현재 실행중인 메써드는 실행한 뒤 메써드를 호출한 곳으로 프로세스가 되돌아간다.

    이 때 함수 실행으로 리턴 값이 없으면 return을 생략할 수 있고,

    return 값이 있으면 뒤에 값을 지정하는데 리턴값은 하나만 있을 수 있다.

    메써드에서 선언된 리턴 타입과 return 되는 자료형은 반드시 같아야 한다.

 

 

   예제 1)

 

package Java07;

class Calcc {
	int opera(int a, int b) {
		return a-b;
	}
}
public class Test07 {

		static void disp() {
			int o;
			Calcc cal = new Calcc();
			o = cal.opera(9, 10);
			System.out.println(o);
			
		}
		public static void main(String[] args) {
			disp();
	}

}

   예제 2)

 

package Java07;
import java.util.*;
public class Test08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = -1;
		System.out.println("a의 값 : " + a);
		System.out.println("a의 절대값 : " + abs(a));
		System.out.println("a의 절대값 : " + Math.abs(a));
	}

	private static int abs(int num) {
		// TODO Auto-generated method stub
		return num>=0 ? num : -num; 
	}

}

==> 보통은 함수를 처리할 때 변수와 함수 선언은 main( ) 메써드 앞에서 먼저 하고 함수 몸체도 먼저 기술해 주는 것이 좋다.

하지만 함수 몸체는 main( )메써드 다음으로 넘겨도 된다.