프로그래밍

[자바 기초] day05 : 함수의 인자 본문

자바/자바 기초

[자바 기초] day05 : 함수의 인자

시케 2023. 5. 9. 16:25
728x90
반응형

2023.05.09.화

함수의 인자

함수를 호출할 때 인자로 배열을 쓰는 경우 참조에 의한 호출이 발생한다

이때 배열 값을 반환하지 않더라도 함수 인자에 배열의 주소 값이 전달되었기 때문에

힙 메모리에 함수가 접근하여 값이 변할 수 있다

 

이를 '참조에 의한 호출'이라고 한다

call by reference

 

package class00;

public class Test03 {
	   public static void func1(int num) {
	      num+=100;
	   }
	   public static int func2(int num) {
	      return num--;
	   }
	   //함수를 호출할때 인자로 배열을 쓰는 경우
	   //(배열 특성상 주소값이 이동하기 때문에)
	   //참조에 의한 호출
	   public static void func3(int[] data) {
	      for(int i=0;i<data.length;i++) {
	         data[i]=123;
	      }
	   }
	   public static void main(String[] args) {

	      int num=10;
	      int[] data=new int[3];
	      for(int i=0;i<data.length;i++) {
	         data[i]=i+1; // [ 1, 2, 3 ]
	      }
	      
	      func1(num);
	      System.out.println("num1= "+num);
	      num = func2(num);
	      System.out.println("num2= "+num);
	      func3(data);
	      System.out.print("[ ");
	      for(int v:data) {
	         System.out.print(v+" ");
	         // [ ?, ?, ? ]
	      }
	      System.out.println("]");
	      
	   }
	}

 

위의 코드의 실행 결과는 다음과 같다

num1= 10

num2= 10

[ 123 123 123 ]

 

num1은 반환되지 않아 그대로 10이다

num2는 9로 계산되었지만 반환하고 후위연산자가 실행되기 때문에 10이 반환되어 num2=10이다

data[]는 반환되지 않았지만 참조에 의한 호출로 힙 메모리에 저장된 값이 호출되어 [123 123 123] 이 된다

 

함수의 오버로딩

자바에서는 함수의 오버로딩을 허용하고 있다

 

[오버로딩]

기능이 같으면 메서드 시그니처 즉, 인자의 개수, 자료형 등이 달라도 중복 정의를 허용한다

 

package class00;

public class Test05 {

	public static int plus01(int a, int b) {

		return a + b;
	}

	public static int plus02(int a, int b, int c) {

		return a + b + c;
	}
	
	public static double plus001(double a, double b) {

		return a + b;
	}
	
	public static double plus002(double a, double b, double c) {

		return a + b + c;
	}
	
	

	public static void main(String[] args) {
		
	}

}

위와 같이 함수가 있다면 자료형, 인자 개수에 따라 매번 다른 함수를 써야하기 때문에 함수명을 파악하기 어렵다

위의 코드에선 모든 함수명을 plus()로 바꿔도 정상 작동된다

 

이는 자바에서 자주 쓰는 print 출력에서도 볼 수 있다

System.out.println();
System.out.print();	//에러

print()만 에러가 나는 이유는 print()에 아무런 값도 넣지 않는 기능이 없기 때문이다

 

728x90
반응형
Comments