Wanna be Brilliant Full-Stack Developer

2/21 Java 메서드의 매개변수와 인수란? 본문

Some Memos/Java

2/21 Java 메서드의 매개변수와 인수란?

Flashpacker 2022. 2. 22. 01:00


메서드의 매개변수와 인수에대해 배워보려고한다!

자판기가 있다! 자판기에는 동전투입구가 있다! 또한 지폐 투입기까지 와 카드 투입구까지 있는데

이 자판기를 이용하려면 동전을 넣든, 지폐를 넣든, 카드를 넣어야한다

음료수를 뽑으려면 이 셋중에 하나는 넣어야한다! 

 

그래서 이 투입구를 매개변수라고 부른다! 

어떠한것들이 그러면 인수일까? 여기에 들어갈 실제 동전, 실제 지폐, 실제 카드 이런것들이 인수라고 부른다!

 

자판기를 사용하려면 두가지의 개념을 알아야하는데 어떤 매개변수가 있고 어떤 인수를 넣어야하는지 알아야한다. 

동전 투입구에는 동전 넣고, 지폐 투입구에는 지폐 넣고, 카드 투입구에는 카드 넣는것

만약에 지폐 투입구에 카드를 넣으면 제대로 동작하지 않을것이다.

package ch02;

public class MethodEx03 {

	static void 자판기_음료_돌려주기(int coin) {
		System.out.println("동전을 투입하였습니다.");
	}
	
	static void 자판기_음료_돌려주기2(double paper) {
		System.out.println("지폐를 투입하였습니다.");
	}
	
	static void 자판기_음료_돌려주기3(String card) {
		System.out.println("카드를 투입하였습니다.");
	}
	
	public static void main(String[] args) {
		자판기_음료_돌려주기(10000);
		자판기_음료_돌려주기2(1000.50);
		자판기_음료_돌려주기3("삼성카드");
	}
}

세번쨰는 문자열이 매개변수이다. 만약에 다른거를 넣으려고하면? 

이러한 오류가난다 왜냐하면 자판기 음료 돌려주기3 메서드의 매개변수는 String인데 int값 인수를 넣으려고 하니 당연히 안된다.  매개변수와 인수의 타입이 다르면 호출할 수가 없다.

 

메서드 괄호 안에는 메서드를 호출하기 위한 매개변수가 있다.
메서드를 호출하기 위해서는 매개변수에 투입된 인수를 넣어줘야한다! 

package ch02;

public class MethodEx03 {

	static void 자판기_음료_돌려주기(int coin) {
		System.out.println("동전을 투입하였습니다.");
	}
	
	static void 자판기_음료_돌려주기2(double paper) {
		System.out.println("지폐를 투입하였습니다.");
	}
	
	static void 자판기_음료_돌려주기3(String card) {
		System.out.println("카드를 투입하였습니다.");
	}
	
	static void add(int n1, int n2) { //매개변수가 2개!! 
		System.out.println("더하기 메서드가 호출되었습니다.");
	}
	
	public static void main(String[] args) {
		자판기_음료_돌려주기(10000);
		자판기_음료_돌려주기2(1000.50);
		자판기_음료_돌려주기3("삼성카드");
		자판기_음료_돌려주기3("국민카드");
		add(5,6);
		
	}
}

add(5,6) 이렇게 넣으면 이 5는  int n1 에 들어가고 , 6은 int n2에 들어간다! 

메서드는 어떤 클래스의 행위이다! 

행위는 { }내부를 말하는것이고 ( ) 괄호 안에 있는것을 매개변수라고 말하고 

메서드를 호출할떄 넣는 값을 인수라고 한다! 

다시 말하자면 메서드에서 보면 괄호 안에 있는 부분 ,
이 메서드를 호출하기 위한 매개변수가 있다.

그 메서드를 호출하기 위해서는 매개변수에 투입된 인수를 넣어준다. 

매개변수와 인수는 타입이 같아야한다!


 

 

메모리 구조로 봤을때 Static들이 메모리에 뜰텐데
여기서 지금 메모리에 뜨는건 start라는 메서드 밖에 없다.

 

num 값은 heap에 떠야하는데 이건 new를 해야지만 메모리에 뜬다

new를 안하고 start를 호출하게 되면 num값이 없기 때문에 호출을 못하게 된다. 

현재 메모리에는 static은 떴는데 int num = 10;은 메모리에 뜨지 않았기때문에 호출할수가 없다. 

Anum값이 heap공간에 없기 때문에 호출이 불가능하다.

A s = new A(); 

system.out.println(s.num); 이렇게 하면 값이 나올것이다!